[英]How to format the URL of my ASP.NET MVC 5 website
我有一個網站,它的網址出現在瀏覽器中,如下所示:
mysite.com/Produto/PaoDeMel
並且出於SEO的原因,我希望它像:
mysite.com/produto/pao-de-mel
但我的動作名稱是PaoDeMel,並且該框架不允許我在名稱上使用“-”。
是否有路由配置或其他任何方式可以實現我的目標?
PS .: 如何在MVC 5中更改URL中建議的解決方案? 沒有為我工作。
謝謝
您需要實現IRouteHandler
和IHttpHandler
接口(特別注意IHttpHandler實現的ProcessRequest方法):
public class MyRouteHandler : IRouteHandler
{
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
return new MyHttpHandler();
}
}
public class MyHttpHandler : IHttpHandler
{
public bool IsReusable
{
get
{
return true;
}
}
public void ProcessRequest(HttpContext context)
{
// Take routes values to build a url string that can be handled by "Default" route
string url = "/" + context.Request.RequestContext.RouteData.Values["controller"].ToString().ToLower();
url += "/" + (context.Request.RequestContext.RouteData.Values["part1"] as string).Replace("-", "").ToLower() + (context.Request.RequestContext.RouteData.Values["part2"] as string).Replace("-", "").ToLower();
url += "/" + context.Request.RequestContext.RouteData.Values["id"];
context.Server.TransferRequest(url, true);
}
}
接下來,添加處理默認和自定義路由的路由:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
constraints: new { action = @"[^\-]*" }
);
routes.Add("MyRoute",
new Route("{controller}/{part1}-{part2}/{id}",
new RouteValueDictionary { { "controller", "Home" }, { "action", "Index" }, { "id", "" } },
new MyRouteHandler() // Custom route handler
)
);
}
無論您的網址在操作段中有多少個連字符(mysite.com/produto/pao-de-mel、mysite.com/produto/pao-de-mel-abc等),都會由“ MyRoute”捕獲”路由,並將由MyRouteHandler
處理,該路由會將路徑轉換為可以由“默認”路由處理的url,從而通過轉移要由ASP.NET MVC路由的常規流程處理的請求來實現此目的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.