繁体   English   中英

在自定义属性中查找mvc3操作方法参数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM