2010-05-09 13 views
6

Okay, ich bin sehr neu in C# und ich versuche, eine kleine Website mit ASP MVC2 zu erstellen.ASP MVC C#: Ist es möglich, dynamische Werte in ein Attribut zu übergeben?

Ich möchte mein eigenes Autorisierungsattribut erstellen. aber wenn es möglich ist, muss ich einige Werte übergeben.

Zum Beispiel:

[CustomAuthorize(GroupID = Method Parameter?] 
    public ActionResult DoSomething(int GroupID) 
    { 
     return View(""); 
    } 

Ich möchte den Zugriff auf eine Seite autorisieren. aber es hängt von dem Wert ab, der an die Steuerung weitergegeben wird. Die Berechtigung hängt also von der groupID ab. Ist dies in irgendeiner Weise möglich ?.

Vielen Dank im Voraus.

Antwort

4

den Wert Anbieter verwenden:

public class CustomAuthorizeAttribute : FilterAttribute, IAuthorizationFilter 
{ 
    public void OnAuthorization(AuthorizationContext filterContext) 
    { 
     var result = filterContext.Controller.ValueProvider.GetValue("GroupId"); //groupId should be of type `ValueProviderResult` 

     if (result != null) 
     { 
      int groupId = int.Parse(result.AttemptedValue); 

      //Authorize the user using the groupId 
     } 
    } 

}

This article kann Ihnen helfen.

HTHS,
Charles

+0

Dies sollte den Trick tun. Vielen Dank! –

2

Sie bekommen es von Request.Form

public class CustomAuthorizeAttribute : AuthorizeAttribute 
{ 
    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     //httpContext.Request.Form["groupid"] 
     return base.AuthorizeCore(httpContext); 
    } 
} 
+0

Das wird nur funktionieren, wenn es ein Post ist ... – Charlino

+0

Sie könnten Request ["groupID"] dann verwenden. –

0

Sie bekommen es von Request.Form

public class CustomAuthorizeAttribute: AuthorizeAttribute { protected override bool AuthorizeCore (Httpcontextbase Httpcontext) { //httpContext.Request.Form ["groupid"] Rückgabe base.AuthorizeCore (httpContext); } }