asp.net-mvc – 在ASP.NET MVC中为URL段添加ID和标题

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – 在ASP.NET MVC中为URL段添加ID和标题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如果一部分URL丢失,如何将ASP.NET MVC中的请求重定向到其正确的规范版本?

使用Stack Overflow作为示例,网站将问题标题添加到其路由的末尾,但使用问题ID在路由中实际找到问题。如果标题省略,您将被重定向到正确的URL。

例如,访问网址:

  1. stackoverflow.com/questions/9033

重定向

  1. stackoverflow.com/questions/9033/hidden-features-of-c

这个怎么用?

解决方法

首先创建一个路由:
  1. routes.MapRoute(
  2. "ViewProduct","Products/{id}/{productName}",new { controller = "Product",action = "Details",id = "",productName = "" }
  3. );

然后创建Action方法如下:

  1. public ActionResult Details(int? id,string productName)
  2. {
  3. Product product = ProductRepository.Fetch(id);
  4.  
  5. string realTitle = UrlEncoder.ToFriendlyUrl(product.Title);
  6. string urlTitle = (productName ?? "").Trim().ToLower();
  7.  
  8. if (realTitle != urlTitle)
  9. {
  10. string url = "/Products/" + product.Id + "/" + realTitle;
  11. return new PermanentRedirectResult(url);
  12. }
  13.  
  14. return View(product);
  15. }

你基本上将URL中的实体标题与存储在数据库中的实体标题进行比较,如果它们不匹配,则执行301永久重定向。确保它是一个“永久”重定向(301状态代码),而不是临时重定向(302)。这样,搜索引擎会将其视为永久更改URL,并相应地更新其索引,如果实体标题搜索引擎编入索引后发生更改(例如某人更改了产品名称),则可能会发生这种情况。

另一件需要注意的事情,如果您的标题允许任何自由文本,您需要删除任何无效的网址的字符,并使其更可读的人类和搜索引擎,因此UrlEncoder.ToFriendlyUrl方法代码以上,实现如下:

  1. public static class UrlEncoder
  2. {
  3. public static string ToFriendlyUrl (this UrlHelper helper,string urlToEncode)
  4. {
  5. urlToEncode = (urlToEncode ?? "").Trim().ToLower();
  6.  
  7. StringBuilder url = new StringBuilder();
  8.  
  9. foreach (char ch in urlToEncode)
  10. {
  11. switch (ch)
  12. {
  13. case ' ':
  14. url.Append('-');
  15. break;
  16. case '&':
  17. url.Append("and");
  18. break;
  19. case '\'':
  20. break;
  21. default:
  22. if ((ch >= '0' && ch <= '9') ||
  23. (ch >= 'a' && ch <= 'z'))
  24. {
  25. url.Append(ch);
  26. }
  27. else
  28. {
  29. url.Append('-');
  30. }
  31. break;
  32. }
  33. }
  34.  
  35. return url.ToString();
  36. }
  37. }

因此,当您将网址写入视图时,请务必使用此方法标题进行编码。

  1. <a href="/Products/@Model.Id/@Url.ToFriendlyUrl(Model.Title)">@Model.Title</a>

我写了一个博客文章这里http://www.dominicpettifer.co.uk/Blog/34/asp-net-mvc-and-clean-seo-friendly-urls

猜你在找的asp.Net相关文章