与Action Parameters结合使用RouteData.Values

时间:2012-05-16 02:43:07

标签: c# asp.net-mvc routing

我在自定义RouteData

中设置了一些Action Filter
filterContext.RouteData.Values.Add("accountId", accountId);
filterContext.RouteData.Values.Add("permission", (int)permission);

然后我有一个像下面这样的动作

public ActionResult Get(Guid accountId, int permission, int id) {

}

我可以通过路线将RouteData值与动作参数结合吗?如果是这样,怎么样?

我想使用诸如

之类的网址
http://localhost/Users/Get/1

他们的路线数据存在,可以使用

进行检索
Guid accountId = (Guid)RouteData.Values["accountId"];
Permission permission = (Permission)RouteData.Values["permission"];

2 个答案:

答案 0 :(得分:1)

您应该创建自定义ValueProvider,而不是动作过滤器 有关详细信息,请参阅here

答案 1 :(得分:1)

您可以使用ActionParameters属性:

public class MyActionFilterAttribute: ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        filterContext.ActionParameters["accountId"] = Guid.NewGuid();
        filterContext.ActionParameters["permission"] = 456;
    }
}

然后:

public class HomeController : Controller
{
    [MyActionFilter]
    public ActionResult Index(Guid accountId, int permission, int id)
    {
        return Content(string.Format("accountId={0}, permission={1}", accountId, permission));
    }
}

当您请求/home/index/123时,会显示以下内容:

accountId=f72fddb8-1c35-467b-a479-b2668fd5b2ec, permission=456