【问题标题】:Asp.net MVC5 route parameter issueAsp.net MVC5 路由参数问题
【发布时间】:2016-06-09 19:29:34
【问题描述】:

我正在尝试在 asp.net MVC5 中创建 URL。我正在寻找的行为如下:

http://www.example.com/es/faqs ----> when language is Spanish
http://www.example.com/faqs    ----> when language is english

这个 URL 的路径:

routes.MapRoute(
        name: "FAQs",
        url: "{lang}/FAQs",
        defaults: new { controller = "StaticPages", action = "FAQs", lang= UrlParameter.Optional }
    );

此 URL 以西班牙语呈现 find --> http://www.example.com/es/faqs

但我的问题是这个 url 不能正常工作 --> http://www.example.com/faqs

当我尝试访问此 URL 时,我收到一个找不到页面的错误。

在我的路由中,我试图将 lang(Language code) 设为可选,为什么我的路由在 URL 中没有语言代码时不起作用。

【问题讨论】:

  • 可选参数应该是路由模板中的最后一件事。当可选参数后面有任何内容时,它将不起作用。
  • 您可能想看看this answer 了解如何管理默认语言。也可以在 Route 类上使用装饰器模式和/或使用自定义属性路由,这样您就不需要复制每条路由。

标签: c# asp.net-mvc asp.net-mvc-5 asp.net-mvc-routing


【解决方案1】:

可选参数应该是路由模板中的最后一件事。当可选参数之后有任何内容时,它将不起作用。您将不得不创建两个模板来支持这两种格式

routes.MapRoute(
        name: "LocalizedFAQs",
        url: "{lang}/FAQs",
        defaults: new { controller = "StaticPages", action = "FAQs", lang = "en" }
);

routes.MapRoute(
        name: "DefaultFAQs",
        url: "FAQs",
        defaults: new { controller = "StaticPages", action = "FAQs", lang = "en" }
);

【讨论】:

  • @Nikosi,所以没有重复的路线就没有办法做到这一点吗?
  • 据我所知。从我看到的许多示例中,一旦您在路线中有一个可选参数,您就不能再有任何东西了。看看这个类似的问答 - stackoverflow.com/a/32839796/5233410
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 2016-01-27
  • 2023-01-25
  • 2014-11-01
  • 2016-07-10
相关资源
最近更新 更多