我希望为我的ASP.NET MVC网站实现一个SEO友好的URL。
目前,我的URL是这样的:
目前,我的URL是这样的:
http://www.domain.com/product?id=productid
但现在我想重写我的URL,例如:http://www.domain.com/productname
所以请任何人可以帮助我上面的问题...
http://www.domain.com/product?id=productid
但现在我想重写我的URL,例如:http://www.domain.com/productname
所以请任何人可以帮助我上面的问题...
global.asax.cs
中。routes.MapRoute(
"Product",
"{productName}",
new { controller = "Product", action = "Index" },
new { productName = UrlParameter.Optional }
);
但是您需要在productName
中保持唯一性,并在产品控制器的索引操作中通过该字段获取记录 (即在产品控制器中:
public ActionResult index(string productName)
{
//do something regarding get product by productname
}
routes.MapRoute(
"Product",
"{controller}/{productId}/{productName}",
new { controller = "Product", action = "Index" },
new { productId = UrlParameter.Optional , productName = UrlParameter.Optional }
);
这将允许您拥有像
URL这样的链接
www.domain.com/productid/productname
你能否实现这个目标,原因可能有很多。
www.domain.com/productname
产品名称不是唯一标识符,不能用于唯一查找记录。您需要在URL中使用标识符。
例如-查看SO中此问题的URL,它具有ID,然后附加SEO友好的文本。
复制以下代码并粘贴。{ routes.MapRoute }
routes.MapRuote
{
name: "productname",
routeTempalate: "services {controller}{aciton}{id}
defaults: new (id = RouteParameter.Optionl;)
}
但是对于你来说,用你的要求替换"routeTemplate"
。 对于你来说,它会像这样:
routeTemplate: "services{controller}/{productname}"
希望这能对你有所帮助。
routes.MapRoute(
"productId", // Route name
"productId/{id}/{name}", // URL with parameters
new { controller = "Home", action = "productId", id = 1234, name = widget } // Parameter defaults
);
Asp.Net MVC 已经内置了路由,因此不需要 Url Rewriter。
更多详情在这里。