从控制器更改URL?

Shi*_*mmy 6 asp.net-mvc url-routing url-parameters

有没有办法从控制器更改当前的url参数,所以当页面加载时,地址栏中会显示其他/不同的参数?

这就是我的意思,说我有一个动作'产品':

public ActionResult Product(int productId)
{
  ..
}
Run Code Online (Sandbox Code Playgroud)

我映射了路由以便product/4545/purple-sunglasses映射到上面的函数,实际上忽略了产品名称,但是我想,如果没有指定产品名称,控制器应该添加它,这样产品就可以很容易地进入搜索引擎等.

Ren*_*ink 7

看看这里:http://www.dominicpettifer.co.uk/Blog/34/asp-net-mvc-and-clean-seo-friendly-urls

有一个很长的描述如何做到这一点.最后一部分将向您介绍301重定向,您应该使用它来指示搜索引擎抓取工具在您希望的URL下找到该页面.

不要忘记看一下url-encoding,应该为你节省一些工作并提供更高质量的网址.

以下是博客文章中的一些重要摘要:

设置您的路由:

routes.MapRoute( 
    "ViewProduct", 
    "products/{id}/{productName}", 
    new { controller = "Product", action = "Detail", id = "", productName = "" } 
);
Run Code Online (Sandbox Code Playgroud)

将名称部分添加到控制器并检查它是否是正确的名称:

public ActionResult Detail(int id, string productName) 
{ 
    Product product = IProductRepository.Fetch(id); 

    string realTitle = product.Title; // Add encoding here

    if (realTitle != urlTitle) 
    { 
        Response.Status = "301 Moved Permanently"; 
        Response.StatusCode = 301; 
        Response.AddHeader("Location", "/Products/" + product.Id + "/" + realTitle); // Or use the UrlHelper here
        Response.End(); 
    }

    return View(product); 
}
Run Code Online (Sandbox Code Playgroud)

更新
网址显然已损坏.本文主要介绍相同的功能:http://www.deliveron.com/blog/post/SEO-Friendly-Routes-with-ASPnet-MVC.aspx

感谢Stu1986C的评论/新链接!

  • 谢谢.顺便说一句,将链接内容的关键部分复制到帖子中总是一个好习惯,所以如果明天该链接已经死亡,用户仍然可以从中受益.此外,它将更容易访问,人们可以更清楚地看到答案. (2认同)
  • 链接已经死了.这是新的:http://www.deliveron.com/blog/post/SEO-Friendly-Routes-with-ASPnet-MVC.aspx (2认同)