0

我正在尝试将用户浏览器中显示的 URL 从 Happy/Balloons 更改为 happy-times/balloon-pops。项目中有许多指向动作“Balloons”的链接,因此我不想更改这些链接,而是更改 global.asax,以便为同一动作显示不同的 URL。原始 MVC 路由如下所示:

routes.MapRoute(
            "Happy.Balloons",
            "Happy/Balloons/{groupId}/{paymentType}/{mortgageValue}/{province}",
            new { controller = "Happy", action = "Balloons" },
            new { groupId = "\\d+", paymentType = "\\d+", mortgageValue = "\\d+", province = "\\d+" }
        );

我已将代码更改为

routes.MapRoute(
            "Happy.Balloons",
            "happy-times/balloon-pops/{groupId}/{paymentType}/{mortgageValue}/{province}",
            new { controller = "Happy", action = "Balloons" },
            new { groupId = "\\d+", paymentType = "\\d+", mortgageValue = "\\d+", province = "\\d+" }
        );

我认为第二个参数是显示的 URL,但我得到一个:“您要查找的资源已被删除、名称已更改或暂时不可用。” 错误。有没有一种简单的方法可以通过修改 MapRoute 中的参数来做到这一点?如果是这样,怎么做?

问题跟进:在 mvc 中更改操作的 URL

4

2 回答 2

2

你这样做是错的。

更改路由映射不会更改控制器的名称。更改控制器和操作名称,并{controller}/{action}像默认一样映射您的路线。然后,您可以像以前一样设置默认控制器和操作。

然后你的控制器必须重命名为happy-times,你的动作重命名为balloon-pops

我应该注意到它看起来更像这样:

{controller}/{action}/{groupId}/{paymentType}/{mortgageValue}/{province}

这是关于该主题的一个很好的资源。

http://www.asp.net/mvc/tutorials/older-versions/controllers-and-routing/asp-net-mvc-routing-overview-cs

正如这篇 SO 帖子带给你的那样https://stackoverflow.com/a/2375293/1178921

**看起来您可能正在尝试查看更多方法来做到这一点。

这篇文章讨论了您可以用来以不同方式路由 URL 的属性。 ASP.NET MVC 通过方法属性路由

此外,您在映射中更改 url 的方式可以工作,但不是我认为您的意图。 在那种情况下,扎克开发者已经死了这个。您的可选参数需要标记为UrlParameter.Optional

于 2012-05-29T15:55:53.403 回答
2

这有效,(将 urlParameter.Optional 替换为默认值)

routes.MapRoute( _
            "Happy.Balloons", _
            "happy-times/ballons-pops/{groupId}/{paymentType}/{mortgageValue}/{province}", _
            New With {.controller = "happy", .action = "Balloons", .groupId = UrlParameter.Optional, .paymentType = UrlParameter.Optional, .mortgageValue = UrlParameter.Optional, .province = UrlParameter.Optional} _
    )

但是......这是一种不好的做法(真的很糟糕)

你可以在这里了解路线图

于 2012-05-29T16:01:23.457 回答