2016-08-04 14 views
1

Ich habe ein benutzerdefiniertes AuthorizeAttribute in MVC geschrieben. Ich habe es auf einen Controller für die Sicherheit angewendet. In dieser AuthorizeAttribute-Klasse, die ich geschrieben habe, sind verschiedene Variablen, die ich von einem Web-Service-Aufruf gesammelt habe, auf den ich gerne zugreifen möchte, um zu verhindern, dass der Web-Service erneut aufgerufen werden muss. Ist das möglich?Zugreifen auf AuthorizationAttribute in Controller

+0

tun Sie nur zugreifen möchten zu folgen 'GENEHMIGUNGS Attribut in Ihrem Controller? –

Antwort

1

Ihre beste Ansatz wäre HttpContext.Current.Items zu verwenden, um diese Variablen zu speichern, da diese Daten nur für eine einzige HTTP-Anforderung ist. Etwas wie folgt aus:

public class CustomAuthorize : AuthorizeAttribute 
{ 
    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     if (httpContext.User.Identity == null) return false; 
     if (!httpContext.Request.IsAuthenticated) return false; 

     var user = new WSUser(); //get this from your webservice 
     if(user == null) return false; 

     httpContext.Items.Add("prop", user.Property); 

     return user.Authorized; 
    } 
} 

public class HomeController : Controller 
{ 
    [CustomAuthorize] 
    public ActionResult Index() 
    { 
     var property = (string) HttpContext.Items["prop"]; 
     return View(); 
    } 
} 

Sie würden auch eine Logik zum Speichern und Abrufen von Nachrichten von HttpContext.Current in eine separate Klasse kapseln wollen den Code sauber zu halten und Single responsibility principle

0

Sie könnten diese Variablen in einer statischen Klasse speichern, um sie zu speichern. Eine elegante Lösung wäre jedoch, ein Modellbinderobjekt zu haben, das Sie wie einen Parameter in Ihrem Controller aufrufen und der die statische Klasse liest und die benötigten Eigenschaften zurückgibt. Vielleicht, wenn Sie Sicherheit anwenden, das Beste wird sein, dass die Webservices jeweils einmal aufrufen.

Reference for your custom model binder