【问题标题】:Routing error in ASP.NET MVC 4ASP.NET MVC 4 中的路由错误
【发布时间】:2013-02-28 20:33:14
【问题描述】:

我在 ASP.NET MVC 路由中偶然发现了一个奇怪的行为。

在我的 RouteConfig 文件中,当我映射这样的路由(默认路由)时:

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new {
                controller = "Home",
                action = "Index",
                id = UrlParameter.Optional
            }
        );

使用:

@Html.ActionLink("Index", "Home")

我得到一个漂亮、干净且简短的 URL,例如:http://mysite/

但是如果我在id之后再添加一个可选参数,像这样:

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}/{name}",
            defaults: new {
                controller = "Home",
                action = "Index",
                id = UrlParameter.Optional,
                name = UrlParameter.Optional
            }
        );

相同的ActionLink 每次都输出这个URL:http://mysite/home/index。我使用RedirectToAction 验证了相同的行为。

我的问题是:有没有办法解决这个问题并在后一种情况下获得较短的 URL?为什么 ASP.NET MVC 路由引擎在这些情况下表现不同?

编辑

我按照 Dave A 发布的说明设法解决了这个问题。我在与我的自定义 URL 模式匹配的“默认”路由之前添加了一个自定义路由。

routes.MapRoute(
    name: "Custom",
    url: "{controller}/{action}/{id}/{name}",
    defaults: new {
        controller = "Home",
        action = "Index",
        id = UrlParameter.Optional
    }
);

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new {
        controller = "Home",
        action = "Index",
        id = UrlParameter.Optional
    }
);

【问题讨论】:

  • 你在哪里渲染这些路线?你总是从 /Home/Index 冒险吗?
  • 我尝试了不同的动作/控制器,在两种情况下总是得到相同的结果。
  • MVC 框架处理路由的方式确实存在“错误”或效率低下。特别是在这种情况下,它试图充分利用所有参数,但会感到困惑。阅读 hacked 的这篇文章,显示系统中有更多“故障”haacked.com/archive/2011/02/20/…
  • 我相信 System.Web.Routing 机制在 .NET 4 和 .NET 4.5 中是相同的。该问题与路由和 MVC 3/4 有关。您可以在weblogs.asp.net/imranbaloch/archive/2010/12/26/… 获得详细信息和临时修复。
  • @DaveA 谢谢!您应该将此作为答案发布。

标签: asp.net asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing


【解决方案1】:

MVC 框架处理路由的方式确实存在“错误”或效率低下。特别是在这种情况下,它试图充分利用所有参数,但会感到困惑。

阅读 hacked 的这篇文章,该帖子显示系统中有更多“故障”http://weblogs.asp.net/imranbaloch/archive/2010/12/26/routing-issue-in-asp-net-mvc-3-rc-2.aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-25
    • 2014-05-25
    • 2020-04-04
    • 2016-07-30
    • 2016-07-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多