[英]Finding mvc3 action method parameters in custom attribute
我正在努力在mvc3应用程序上实现用户权限管理。
我已经使用ControllerName,ActionName定义了我的操作方法,参数包括ParameterName和ParameterType等。
我实现了一个继承自Authorize属性的自定义属性。
我想要做的是找到在我在数据库上定义的内置动作中执行的动作,并计算用户是否具有指定动作的权限。
代码是这样的;
[HttpPost]
[MyAuthorize]
public ActionResult Edit(VendorPageItem entity)
{
//...
}
public class MyAuthorize: System.Web.Mvc.AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
if (httpContext == null)
throw new ArgumentNullException("httpContext");
string controller = httpContext.Request.RequestContext.RouteData.Values["controller"].ToString();
string action = httpContext.Request.RequestContext.RouteData.Values["action"].ToString();
int userId = SessionState.Current.LoginParameter.VendorUserID;
List<string> parameterTypes = new List<string>();
//TODO: Find out action method parameter types.
return IoCWorker.Resolve<IUserRightService>().HasUserRightToAction(userId, controller, action, parameterTypes);
}
}
我的问题是在我的自定义属性中找到方法参数类型。
谢谢。
编辑:忘了提到那是后期行动。 [HttpPost]补充道。
我认为反思就是这里的答案。
一旦掌握了控制器和操作,并假设您事先知道了命名空间,就可以检查控制器Type
并深入查看其方法和相对签名/重载。
除了控制器和操作之外,检查RouteData的全部内容可以告诉您它传递给方法的内容。
我没有试过,但从你说的话看来它似乎会这样。
我不确定我是否理解你的问题。 如果你试图访问参数值,我有一个答案,如果你真的想知道参数类型,那么@Matteo Mosca的答案是正确的:
这取决于参数的来源。 无论是QueryString参数还是表单参数或cookie还是......
ASP.NET的模型绑定器基础结构尝试映射操作方法上的参数。 在您的自定义属性中,您可以使用上下文访问参数,例如
string input = httpContext.Request.Form["myInput"]
编辑:这当然不是最好的解决方案,因为您需要有关已发布参数的信息。 由于我不知道你的真实要求,我无法提出更好的建议。 当然,您可以遍历Form集合。
可能的是,您可以将字段的名称作为MyAuthorizeAttribute的参数/属性传递。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.