【发布时间】:2012-12-02 20:30:28
【问题描述】:
我在我的应用程序中定义了以下两条路由。
routes.MapRoute(
"ApplicationRoutes",
"{language}-{country}/{userid}/{controller}/{action}/{id}",
new { language="en" , country="gb", id = UrlParameter.Optional }
);
routes.MapRoute(
"Default",
"{language}-{country}/{controller}/{action}/{id}",
new { language = "en", country = "gb", id = UrlParameter.Optional }
);
第一条路线将捕获像
这样的 url- zh-CN/11111/Targets/List
- zh-CN/11111/Targets/Edit/2
第二条路线是默认路线,将用于此类事情
- zh-cn/帐户/登录
- 等
我的问题是我有某些控制器,我想强制仅在它们通过 applicationRoutes 路由到达时才被调用。
例如,我想确保使用路由数据中的用户 ID 调用目标控制器。
我知道我可以在每个控制器操作中检查用户 ID 键是否存在且路由数据中的值。但这对我来说似乎并不优雅。
我还可以更具体地了解路线并执行以下操作:
routes.MapRoute(
"ApplicationRoutes",
"{language}-{country}/{userid}/Targets/{action}/{id}",
new { language="en" , country="gb", controller="targets", id = UrlParameter.Optional }
);
但这不会在不提供用户 ID 值的情况下直接停止对 en-gb/Targets/List/ 的请求。
处理这个问题的最佳方法是什么?
【问题讨论】:
标签: asp.net-mvc asp.net-mvc-routing asp.net-mvc-controller