有没有一种方式可以从控制器更改当前url参数,以便在加载页面时,在地址栏中显示其他/不同的参数?
这是我的意思,假设我有一个名为“Products”的操作:
public ActionResult Product(int productId)
{
..
}
我映射了路由,使得product/4545/purple-sunglasses
被映射到上面的函数,实际上产品名称被忽略了,但是我希望,如果没有指定产品名称,控制器应该添加它,这样产品就可以轻松地进入搜索引擎等。
有没有一种方式可以从控制器更改当前url参数,以便在加载页面时,在地址栏中显示其他/不同的参数?
这是我的意思,假设我有一个名为“Products”的操作:
public ActionResult Product(int productId)
{
..
}
我映射了路由,使得product/4545/purple-sunglasses
被映射到上面的函数,实际上产品名称被忽略了,但是我希望,如果没有指定产品名称,控制器应该添加它,这样产品就可以轻松地进入搜索引擎等。
routes.MapRoute(
"ViewProduct",
"products/{id}/{productName}",
new { controller = "Product", action = "Detail", id = "", productName = "" }
);
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);
}
更新
显然,该网址已经失效。这篇文章描述的大部分功能与之类似:http://www.deliveron.com/blog/post/SEO-Friendly-Routes-with-ASPnet-MVC.aspx
感谢Stu1986C提供的评论/新链接!