【问题标题】:Routing with optional values and default value带有可选值和默认值的路由
【发布时间】:2020-11-02 14:34:55
【问题描述】:

我正在尝试实现一个带有可选值(语言)的路由,如果它不是由 url 给出的,它的默认值,例如“de”。

我有以下测试控制器:

public IActionResult Index(string lang = "de")
{
    return View();
}

public IActionResult Privacy(string lang = "de")
{
    return View();
}

以及以下路由器配置:

app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{lang?}/{action=Index}/{id?}");
            });

所以我的预期结果应该是:

path:                                expected invocation:                    actual invocation
localhost:44305/                 --> invoke Index(string lang = "de")    --> working
locahlhost:44305/home/en/index   --> invoke Index(string lang = "en")    --> working
localhost:44305/home/privacy     --> invoke Privcay(string lang = "de")  --> ERROR!!! invoking Index(string lang = "privacy") 
localhost:44305/home/de/privacy  --> invoke Privacy(string lang = "de")  --> working
localhost:44305/home/en/privacy  --> invoke Privacy(string lang = "en")  --> working

如您所见,我遇到了 url ../home/privacy 的问题,因为控制器认为这是我的新语言字符串。

有什么建议可以预防吗?

【问题讨论】:

  • 嗨@Trace,如果我的回答对您有帮助,您能接受吗?请参阅:How to accept as answer。这也可以帮助其他人。谢谢。:)
  • 对不起,我不知道我能做到。谢谢你的建议。

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


【解决方案1】:

如下更改您的路线模板:

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");
    endpoints.MapControllerRoute(
        name: "lang",
        pattern: "{controller=Home}/{lang?}/{action=Index}/{id?}");
});

【讨论】:

  • 谢谢先生!这就是我一直在寻找的。​​span>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-29
  • 1970-01-01
  • 1970-01-01
  • 2012-09-13
  • 2023-02-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多