2013-02-06 11 views
5

sto implementando un'AuthorizationFilterAttribute per un controller WebAPI, ma non sembrano avere accesso ai parametri che vengono passati nel regolatore:WebAPI AuthorizationFilterAttribute: ActionArguments sono vuoti

In MVC4, questo funziona bene :

public class MyMVCController : Controller 
{ 
    [CanAccessMyResourceApi] 
    public MyViewModel Get(int id) 
    { 
     //... 
    } 
} 

public class CanAccessMyResourceMVCAttribute : CanAccessAttributeBase 
{ 
    public override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     var param = filterContext.Controller.ValueProvider.GetValue("id") 
     /// ... 
    } 
} 

ma in WebAPI, penso che il parametro deve essere nelle ActionArguments, ma "param" qui è vuota:

public class MyWebApiController : ApiController 
{ 
    [CanAccessMyResourceWebApi] 
    public MyViewModel Get(int id) 
    { 
     //... 
    } 

} 

public class CanAccessMyResourceWebApiAttribute : AuthorizationFilterAttribute 
{ 
    public override void OnAuthorization(HttpActionContext filterContext) 
    {  
     // the debugger shows that ActionArguments is empty: 
     var param = filterContext.ActionArguments["id"] 
     /// ... 
    } 
} 

è il parametro che è passato nel controller disponibile da qualche altra parte? (Ho verificato che l'azione del controller è sempre il valore Id correttamente quando ho rimuovere l'attributo di filtro.)

+1

Il parametroBinding si verifica dopo che AuthorizationFilters viene eseguito nell'API Web, quindi credo che ciò che viene visualizzato è un comportamento previsto. –

+2

Sembra che possa essere fatto con un ActionFilterAttribute invece: http://stackoverflow.com/questions/12817202/accessing-post-or-get-parameters-in-custom-authorization-mvc4-web-api – mikebridge

risposta

0

Avete dato un'occhiata alle soluzioni da qui: Accessing post or get parameters in custom authorization MVC4 Web Api

particolare

var variable = HttpContext.Current.Request.Params["parameterName"]; 

e

public class CustomAuthorizeAttribute : AuthorizeAttribute 
    { 
    protected override bool IsAuthorized(System.Web.Http.Controllers.HttpActionContext actionContext) 
    { 
     var clientId = actionContext.ControllerContext.RouteData.Values["clientid"]; 

    } 
    } 
Problemi correlati