passing action method parameter to ActionFilterAttribute in asp.net mvc

北慕城南 提交于 2019-11-30 11:51:17

问题


I know that I can use the filterContext to get to it. However, this is not very flexible if the action method parameter is named differently. This should work:

[HttpGet]
[NewAuthoriseAttribute(SomeId = id)]
public ActionResult Index(int id)
{
    ...

public class NewActionFilterAttribute : ActionFilterAttribute
{   
    public int SomeId { get; set; }
    ...

but it does not (it does not even compile). Any ideas?


回答1:


Building on the answer from @Pankaj and comments from @csetzkorn:

You pass the name of the parameter as a string then check the filterContext

public class NewAuthoriseAttribute : ActionFilterAttribute
{
    public string IdParamName { get; set; }

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (filterContext.ActionParameters.ContainsKey(IdParamName))
        {
            var id = filterContext.ActionParameters[IdParamName] as Int32?;
        }
    }
}

[NewAuthorizeAttribute(IdParamName = "fooId")]
public ActionResult Index(int fooId)
{ ... }



回答2:


Edit

I am assuming that you are looking to make the Alias of Parameter name. This is giving you the flexibility to have multiple Alias of your paramater Name.

ActionParameterAlias.ParameterAlias Overloads

If so, you can give alias like below.

[ParameterAlias("Original_Parameter_Name", 
                 "New_Parameter_Name")]
[ParameterAlias("Original_Parameter_Name", 
                 "New_Parameter_Name1")]
[ParameterAlias("Original_Parameter_Name", 
                 "New_Parameter_Name2")]
[ParameterAlias("Original_Parameter_Name", 
                 "New_Parameter_Name3")]

public ActionResult ActionMethod(Model ParameterValue) { return View(ParameterValue); }


Original Post

Try this one.

Attribute

public class NewAuthoriseAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (filterContext.ActionParameters.ContainsKey("id"))
        {
            var id = filterContext.ActionParameters["id"] as Int32?;
        }
    }
}

Action Method

Make sure to set the Parameter type nullable to avoid RunTime Crash.

[NewAuthoriseAttribute]
public ActionResult Index(Int32? id)
{
}


来源:https://stackoverflow.com/questions/15530779/passing-action-method-parameter-to-actionfilterattribute-in-asp-net-mvc

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!