我在我的应用程序中定义了以下两个路由。
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 }
);
第一条路线将是捕捉网址,如
第二条路线是默认路线,将用于此类
我遇到的问题是我有一些控制器,如果它们来自applicationRoutes路线,我只想调用它们。
例如,我想确保使用routedata中的用户ID调用目标控制器。
我知道如果userid键存在于routedata中的值,我可以检查每个控制器操作。但这对我来说似乎并不优雅。
我还可以更具体地说明路线,并做这样的事情:
routes.MapRoute(
"ApplicationRoutes",
"{language}-{country}/{userid}/Targets/{action}/{id}",
new { language="en" , country="gb", controller="targets", id = UrlParameter.Optional }
);
但是这不会直接将请求停止到en-gb / Targets / List /而不提供userid值。
处理此问题的最佳方法是什么?
答案 0 :(得分:0)
您可以为userid参数创建限制。
routes.MapRoute(
"ApplicationRoutes",
"{language}-{country}/{userid}/{controller}/{action}/{id}",
new { language="en" , country="gb", id = UrlParameter.Optional },
new { userid =@"\d+" });
这将确保userid是一个有效的整数,否则下一个路由将用于处理请求。