2013-02-06 17 views
5

Bir WebAPI denetleyicisi için bir AuthorizationFilterAttribute uygulayan, ama ben denetleyicisi geçirilen ediliyor parametrelere erişimi görünmüyor vardır : WebAPI AuthorizationFilterAttribute: MVC4 yılında</p> <p>, bu iyi çalışıyor: ActionArguments boş

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") 
     /// ... 
    } 
} 

ama WebAPI içinde

, ben parametre ActionArguments içinde olması gerektiğini düşünüyorum, ama "param" burada boş:

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"] 
     /// ... 
    } 
} 

param mı denetleyiciye geçirilen eter başka bir yerde mevcut mu? (Ben filtre özelliğini kaldırdığınızda kontrolörün eylem doğru Kimliği değer elde teyit ettik.)

+1

ParameterBinding, AuthorizationFilters Web API'sında çalıştırıldıktan sonra gerçekleşir, bu nedenle gördüğünüzün beklenen davranış olduğuna inanıyorum. –

+2

Bunun yerine bir ActionFilterAttribute ile yapılabilir gibi görünüyor: http://stackoverflow.com/questions/12817202/accessing-post-or-get-parameters-in-custom-authorization-mvc4-web-api – mikebridge

cevap

0

buradan çözümleri göz attınız mı: Accessing post or get parameters in custom authorization MVC4 Web Api

Özellikle

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

ve

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

    } 
    }