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.)
Il parametroBinding si verifica dopo che AuthorizationFilters viene eseguito nell'API Web, quindi credo che ciò che viene visualizzato è un comportamento previsto. –
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