在自定义属性中查找mvc3动作方法参数
本文关键字:方法 参数 mvc3 自定义属性 查找 | 更新日期: 2023-09-27 18:17:12
我正在为一个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);
}
}
我的问题是在我的自定义属性中找到方法参数类型。
谢谢。
编辑:忘了说这是post action。(HttpPost)补充道。
我认为反思是答案。
一旦你有了控制器和动作,并且假设你事先知道名称空间,你就可以检查控制器Type
并深入到它的方法和相对签名/重载。
除了controller和action之外,检查RouteData的全部内容可以告诉你它传递给方法的是什么。
我还没有试过,但从你说的来看,它似乎是这样工作的。
我不确定我是否正确理解了你的问题。如果你试图访问参数值,我有一个答案给你,如果你真的想知道参数类型,那么@Matteo Mosca的答案将是正确的:
这取决于参数的来源。不管是QueryString参数表单参数cookie还是…
ASP的模型绑定器基础结构。. NET尝试将参数映射到动作方法上。在您的自定义属性中,您可以使用上下文访问参数,例如
string input = httpContext.Request.Form["myInput"]
编辑:这当然不是最好的解决方案,因为您需要关于发布参数的信息。因为我不知道你的真正要求,我没有更好的建议。当然,您可以遍历Form集合。