gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 12:14:59 25 4
gpt4 key购买 nike

我正在致力于在 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] 添加。

最佳答案

我认为反射(reflection)是答案。

获得 Controller 和操作后,假设您事先知道命名空间,您可以检查 Controller Type 并深入了解其方法和相关签名/重载。

除了 Controller 和操作之外,还检查 RouteData 的全部内容可以告诉您传递给方法的内容。

我还没有尝试过,但从你所说的看来它会以这种方式工作。

关于c# - 在自定义属性中查找 mvc3 操作方法参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8443272/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com