有没有一种方法可以从c属性所使用的方法向其发送参数

本文关键字:方法 参数 属性 一种 有没有 | 更新日期: 2023-09-27 18:28:19

如何将发送给使用该属性的函数的参数传递到属性中?我需要做这样的事情。。。

[Authorize, AuthorizeLimited( ModuleID=pageModuleId)]
[HttpPost]
public ActionResult MoveModule(int pageModuleId, int sequence)
{
    db.PageModule_Move(pageModuleId, sequence);
    return Json("OK");
}

发送到方法的pageModuleId也必须转到属性。很抱歉,如果已经问过这个问题,我找不到答案。

编辑

好吧,使用@jrummell提供的答案,这里是我的第一个操作过滤器属性:)这只是为了阻止编辑没有排列的模块(ajax使用)的人。

public class AuthorizeModuleEditAttribute : ActionFilterAttribute
{
    private int _moduleID;
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        foreach (var parameter in filterContext.ActionParameters)
        {
            if (parameter.Key == "pageModuleId")
            {
                _moduleID = (int)filterContext.ActionParameters["pageModuleId"];
            }
        }
        if (!SiteHelper.UserPermsForModule(_moduleID)) //checks if user has perms to edit module
            throw (new Exception("Invalid user rights"));
        base.OnActionExecuting(filterContext);
    } 
}

有没有一种方法可以从c属性所使用的方法向其发送参数

否,属性参数值必须是编译时常量。

但是,如果实现自己的操作过滤器,则可以覆盖OnActionExecuting并检查filterContext.ActionParamters中的操作参数。

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
    foreach(var parameter in filterContext.ActionParameters)
    {
        if (parameter.Key == "pageModuleId")
        {
             // do something with pageModuleId
        }
    }
    base.OnActionExecuting(filterContext);
}

属性与方法关联,而不是与方法调用及其参数关联。