3

我在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通过路由将值与操作参数结合吗?如果是这样,怎么做?

我只想使用一个 URL,例如

http://localhost/Users/Get/1

他们的路由数据存在并且可以通过使用来检索

Guid accountId = (Guid)RouteData.Values["accountId"];
Permission permission = (Permission)RouteData.Values["permission"];
4

2 回答 2

1

您应该创建一个 custom ValueProvider,而不是一个 action 过滤器。
有关详细信息,请参阅此处

于 2012-05-16T02:56:22.413 回答
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
于 2012-05-16T07:10:42.870 回答