2017-08-31 1 views
0

Ich versuche, ein benutzerdefiniertes ActionFilterAttribute wie angezeigt zu erstellen. Das Attribut enthält nur eine Eigenschaft von Path.MVC Web API 2 - Verwenden von benutzerdefinierten Attribut für Aktion

public class TestLinkAttribute : ActionFilterAttribute 
{ 
    public string Path { get; set; } 

    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 

    } 
} 

Ich mag wäre in der Lage sein, dieses Attribut für den Zugriff auf den Bereich Hilfeseiten, dass Web-api zu dieser ähnlich integriert.

<td class="api-testLink"> 
@{ 
var attrColl = api.ActionDescriptor.GetCustomAttributes<TestLinkAttribute>(); 
     if(attrColl.Count > 0) 
     { 
      <p>@attrColl[0].Path</p> 
     } 
} 
</td> 

Ich schmückte die Aktion so.

[TestLink(Path = "api/surveys/72469282/responses")] 
public string GetQuestions(int id) 
{ 
} 

Dies ist völliges Neuland für mich, und ich habe ein wenig Forschung getan, aber nicht/weiß nicht, ob es eine schnelle Möglichkeit, dies zu erreichen. Zur Zeit ist die Ausgabe leer, da die Attributsammlung nie> 0 ist

+0

Ich habe eine einfache Version von diesem erstellt, ein benutzerdefiniertes Attribut erstellen, es einer Aktion zuweisen und dann ziehen das Attribut aus, um eine 'Pfad'-Eigenschaft anzuzeigen, wie Sie gezeigt haben. Alles funktioniert in meiner Beispiellösung. Können Sie ein Beispiel bereitstellen, das nicht funktioniert und es z. Github? –

+0

Leider kann ich das momentan nicht. Es ist eine interne App und das Unternehmen ist sehr streng über das Hosting dieser Art von Dingen extern. – Eric

+0

Gibt es eine Chance, dass etwas anderes notwendig ist, weil ich versuche, auf das Attribut im Hilfebereich dieser Anwendung zuzugreifen und etwas mit Reflektion? Ich kann das außerhalb dieser Gegend problemlos tun. – Eric

Antwort

1

Nach weiteren Untersuchungen müssen Sie von System.Web.Http.Filters erben, wenn Sie das benutzerdefinierte Attribut mit einem Controller erstellen, der von ApiController erbt. Ich erbte von der Standard-MVC ActionFilterAttribute von MVC Namespace (System.Web.MVC). Jetzt

using System.Web.Http.Filters; 

namespace App.Extensions 
{ 
    public class TestLinkAttribute : ActionFilterAttribute 
    { 
     public string Path { get; set; } 

    } 
} 

, wenn ich das Attribut aus dem ApiGroup.cshtml im Bereich Hilfeseite zuzugreifen, kann ich die folgenden es verwenden, es wird richtig den Wert erhalten.

Verwandte Themen