编程语言
首页 > 编程语言> > c# – 在自定义属性中查找mvc3操作方法参数

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

作者:互联网

我正在努力在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]补充道.

解决方法:

我认为反思就是这里的答案.

一旦掌握了控制器和操作,并假设您事先知道了命名空间,就可以检查控制器类型并深入查看其方法和相对签名/重载.

除了控制器和操作之外,检查RouteData的全部内容可以告诉您它传递给方法的内容.

我没有试过,但从你说的话看来它似乎会这样.

标签:c,asp-net-mvc-3,custom-attributes
来源: https://codeday.me/bug/20190630/1336063.html