在我的 ASP.NET MVC 项目中,我有一些具有特定名称的区域,Admin
但我希望我的路线使用iAdmin
。
为此,我使用了RegisterArea
可以指定路线的位置,并且效果很好:
context.MapRoute(
"Admin_default",
"iAdmin/{action}",
new { controller = "iAdmin", action = "Index" }
);
但是,在项目中我有另一个默认的路由:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}",
defaults: new { controller = "Identification", action = "Index" }
);
使用此默认路由采用控制器名称,并且由于我的控制器以区域名称而不是路由名称命名,(因此AdminController
而不是iAdminController
)如果 url 类似于/Admin
,则路由将起作用,而我不想要那样。
我怎样才能防止这种情况发生?
我尝试了这两种解决方案:
- 我可以忽略每条
RegisterArea
我不想要的路线,这似乎没问题,但有点太多了,因为我相信我必须忽略每一个动作,除非我可以使用 RegEx - 或者我可以将区域中的控制器重命名为我想要的名称,老实说,这不仅看起来最简单,而且如果我们原来的命名控制器的方法是一个坏主意/做法,那么这也可能是正确的答案
我的问题是:
- 还有其他方法可以阻止使用我们所在区域控制器的名称进行路由吗?
- 我们的控制器原来的命名是否存在问题?
提前感谢您的时间
这可以在您的控制器中通过指定备用路由来完成。例如,听起来您有一个名为 iAdminController 的控制器,它响应“/iAdmin/{action}”,但您希望它响应“/Admin/{action}”
此配置将继续与 iAdmin/ 或 Admin/ 路由一起使用。(推荐,主要是为了避免破坏默认的 {controller}/{action} 路由规则)从我的测试来看,即使我的 URL 和重定向转到控制器名称(在本例中为 iAdmin),使用此路由,浏览器仍将路由显示为“Admin/”,这可能是由于顺序或备用路由造成的。