在我的 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
中忽略我不想要的路线,这看起来不错,但有点太多了,因为我相信我也必须忽略每一个动作,除非我可以使用正则表达式我的问题是:
提前感谢您的宝贵时间
这可以在控制器中通过指定备用路由来完成。例如,听起来您有一个名为 iAdminController 的控制器,它响应“/iAdmin/{action}”,但您希望它响应“/Admin/{action}”
[Route("Admin/[action]")]
[Route("[controller]/[action]")]
public class iAdminController
{
// ...
}
此配置将继续与 iAdmin/ 或 Admin/ 路由一起使用。 (推荐,主要是为了避免破坏默认的 {controller}/{action} 路由规则)根据我的测试,即使我的 URL 和重定向将通过此路由转到控制器名称(即本例中的 iAdmin),浏览器也会将路由显示为“Admin/”,可能是由于顺序或备用路线所致。