2017-01-25 4 views
1

Ich möchte Attribut verwenden, um sicherzustellen, dass bestimmte Header in meiner Anfrage vorhanden sind. Dies ist kein Autorisierungsattribut. Einer der Anwendungsfälle ist, wenn eine Anfrage erhalten wird, möchte ich sicherstellen, dass es X-Request-For-Header für ältere Clients gibt, die richtig behandelt werden können. Es gibt auch andere Anwendungsfälle, aber alle gehen herum und lesen einen bestimmten HTTP-Header-Wert und ergreifen geeignete Maßnahmen, bevor der Controller die Ladung übernimmt.erstellen benutzerdefinierte Validierung Attribut in ASP.net Core

[MyAttribute(HeaderOptions.RequestFor) 
[httpPost] 
public MyMethod(string data) 
{ 
... 
} 

Antwort

3

Sie können ein solches Attribut mit MVC filters erstellen.

Zum Beispiel einen Filter wie folgt erstellen:

public class CheckHeaderFilter : Attribute, IResourceFilter 
{ 
    private readonly string[] _headers; 

    public CheckHeaderFilter(params string[] headers) 
    { 
     _headers = headers; 
    } 

    public void OnResourceExecuting(ResourceExecutingContext context) 
    { 
     if (_headers == null) return; 

     if (!_headers.All(h => context.HttpContext.Request.Headers.ContainsKey(h))) 
     { 
      //do whatever you need to do when check fails 
      throw new Exception("Necessary HTTP headers not present!"); 

     } 
    } 

    public void OnResourceExecuted(ResourceExecutedContext context) 
    { 

    } 
} 

und es dann auf eine Aktion (oder Controller):

[CheckHeaderFilter(HeaderOptions.RequestFor)] 
public IActionResult Index() 
{ 
    ... 
} 

Ich empfehle Ihnen dringend, durch die Dokumentation zu lesen, damit Sie wissen, welche Art von Filter zu verwenden ist. In diesem Beispiel habe ich ResourceFilter verwendet, da es ziemlich früh in der Pipeline ist (direkt nach der Authentifizierung und vor der Modellbindung - was für Ihr Szenario sinnvoll ist).

Aber je nachdem, was Sie tun müssen, sollten Sie den entsprechenden Filter verwenden.

Verwandte Themen