ASP.NET MVC 区域名称不应该是路线

问题描述 投票:0回答:1

在我的 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
    中忽略我不想要的路线,这看起来不错,但有点太多了,因为我相信我也必须忽略每一个动作,除非我可以使用正则表达式
  • 或者我可以将我的区域中的控制器重命名为我想要的名称,老实说,这不仅看起来最简单,而且如果我们最初命名控制器的方法是一个坏主意/实践,这也可能是正确的答案

我的问题是:

  • 有没有其他方法可以防止使用我们区域的控制器名称进行路由?
  • 我们控制器的原始命名是问题吗?

提前感谢您的宝贵时间

asp.net-mvc asp.net-mvc-routing asp.net-mvc-areas
1个回答
0
投票

这可以在控制器中通过指定备用路由来完成。例如,听起来您有一个名为 iAdminController 的控制器,它响应“/iAdmin/{action}”,但您希望它响应“/Admin/{action}”

[Route("Admin/[action]")]
[Route("[controller]/[action]")]
public class iAdminController
{
    // ...
}

此配置将继续与 iAdmin/ 或 Admin/ 路由一起使用。 (推荐,主要是为了避免破坏默认的 {controller}/{action} 路由规则)根据我的测试,即使我的 URL 和重定向将通过此路由转到控制器名称(即本例中的 iAdmin),浏览器也会将路由显示为“Admin/”,可能是由于顺序或备用路线所致。

© www.soinside.com 2019 - 2024. All rights reserved.