具有可选值和默认值的路由
Routing with optional values and default value
我正在尝试实现一个带有可选值(语言)的路由,如果 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 的问题,因为控制器认为这是我的新语言字符串。
有什么可以预防的建议吗?
如下更改路线模板:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapControllerRoute(
name: "lang",
pattern: "{controller=Home}/{lang?}/{action=Index}/{id?}");
});
我正在尝试实现一个带有可选值(语言)的路由,如果 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 的问题,因为控制器认为这是我的新语言字符串。
有什么可以预防的建议吗?
如下更改路线模板:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapControllerRoute(
name: "lang",
pattern: "{controller=Home}/{lang?}/{action=Index}/{id?}");
});