And*_*era 5 url localization routes asp.net-core asp.net-core-2.2
我想根据 Web 应用程序的文化自定义路由,以获得“友好”的 url(以优化 SEO)。例如,对于名为“FirstItemController”的控制器和名为“TheIndexView”的视图:
Asp.Net Core 2.2 将参数转换器的概念引入路由(https://blogs.msdn.microsoft.com/webdev/2018/10/17/asp-net-core-2-2-0-preview3-now-可用/ + https://www.hanselman.com/blog/ASPNETCore22ParameterTransformersForCleanURLGenerationAndSlugsInRazorPagesOrMVC.aspx )
我知道,这些文章是为 2.2.0 预览版 3 编写的。
目前,我已经创建了该类SlugifyParameterTransformer并将其注册在AddMvcoptions 中:
public class SlugifyParameterTransformer : IOutboundParameterTransformer
{
public string TransformOutbound(object value)
{
if (value == null) { return null; }
// Slugify value
return Regex.Replace(value.ToString(), "([a-z])([A-Z])", "$1-$2").ToLower();
}
}
Run Code Online (Sandbox Code Playgroud)
我在路线选项中尝试了两种方法:
app.UseMvc(routes => routes.MapRoute("default", "{culture=fr}/{controller=Home}/{action=Index}/{id?}"));
// works
// AND
app.UseMvc(routes => routes.MapRoute("default", "{culture=fr}/{controller=Home:slugify}/{action=Index:slugify}/{id?}"));
// dosn't works, I don't know where I declare "slugify" for the url template
Run Code Online (Sandbox Code Playgroud)
它的工作原理是:MyFirstItemController.TheIndexView url 是“my-first-item/the-index-view”。现在,我如何本地化我的网址?
我尝试添加RouteAttributeand HttpGetAttribute:
[Route("{culture=fr}/mon-premier-element")]
[Route("{culture=en}/my-first-item")]
public class MyFirstItemController : Controller
{
[HttpGet("???????")] // for moment: [controller]/[action]
public IActionResult TheIndexView()
{ /*...*/ }
}
Run Code Online (Sandbox Code Playgroud)
我不知道 HttpGetAttribute 的 Name 值可以使用什么。这些网址有效:
fr/mon-premier-element/(好的)en/mon-premier-element/(不好)fr/my-first-item(不好)en/my-first-item(好的)| 归档时间: |
|
| 查看次数: |
934 次 |
| 最近记录: |