簡體   English   中英

如何格式化我的ASP.NET MVC 5網站的URL

[英]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中建議的解決方案 沒有為我工作。

謝謝

您需要實現IRouteHandlerIHttpHandler接口(特別注意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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM