【问题标题】:MVC URL not rewritingMVC URL 不重写
【发布时间】:2012-06-03 20:51:54
【问题描述】:

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

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 中的参数来做到这一点?如果是这样,怎么做?

问题跟进:Change URL of action in mvc

【问题讨论】:

  • 瓦伦?巴比伦 5 参考?
  • 其实是我的名字。但现在你让我感兴趣了:)

标签: c# asp.net-mvc url asp.net-mvc-routing maproute


【解决方案1】:

这可行,(将 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} _
    )

但是...这是一种不好的做法(非常不好)

你可以了解路线图here

【讨论】:

  • 你所说的“床上练习”是什么?
  • @AlexeiLevenkov “床上练习”是我们都喜欢的东西 :) 抱歉,我无法抗拒,尽管我认为这是错字。没有难过的感觉
【解决方案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 Routing Via Method Attributes

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

【讨论】:

  • 那么在渲染一个特定的URL的时候有没有办法重写一个控制器的名字呢?也就是说,URL 将始终与控制器具有相同的名称?顺便说一句,感谢您提供的资源,一定会给他们看看并发布我提出的任何解决方案
猜你喜欢
  • 2011-04-23
  • 2016-03-28
  • 2015-07-15
  • 2015-07-24
  • 2012-07-14
  • 2011-08-24
  • 1970-01-01
  • 2013-01-19
  • 2023-03-05
相关资源
最近更新 更多