簡體   English   中英

使用默認路由的ASP.NET MVC自定義路由

[英]ASP.NET MVC custom routing with default route

我有點問題

我有一個運作良好的MVC網站。

我想擁有SEO友好的網址,所以我創建了如下所示的自定義路由

{section}/{group}/{manufacturer}

因為它具有與默認路由相同的字段數

{controller}/{action}/{id}

我在RouteConfig.cs中創建了一個循環,該循環轉到數據庫並循環Sections表並創建自定義路由,例如

FOOD/{group}/{manufacturer}
SPORT/{group}/{manufacturer}
CARS/{group}/{manufacturer}

並將其指向Sections控制器。

它工作正常。 我的問題是,現在我需要將FOOD重命名為FRESH-FOOD,並且我希望保持舊的FOOD鏈接正常工作。

你會推薦什么 ? 我該如何解決?

有沒有更好的方法來做路由部分而不是自定義路由?

對於自定義路由處理程序而言,聽起來像是個好例子。 在下面的ProcessRequest方法中,您可以檢查“ FOOD”的控制器名稱,並重定向到“ FRESH-FOOD”,如下所示:

    public class CustomRouteHandler : IRouteHandler
    {
        public IHttpHandler GetHttpHandler(RequestContext requestContext)
        {
            return new CustomHttpHandler();
        }
    }

    public class CustomHttpHandler : IHttpHandler
    {
        public bool IsReusable
        {
            get
            {
                return true;
            }
        }

        public void ProcessRequest(HttpContext context)
        {
            var routeValues = context.Request.RequestContext.RouteData.Values;
            var controllerName = context.Request.RequestContext.RouteData.GetRequiredString("controller");
            if (controllerName.ToLower() == "food") controllerName = "FRESH-FOOD";
            var controller = ControllerBuilder.Current.GetControllerFactory().
            CreateController(context.Request.RequestContext, controllerName);
            if (controller != null)
            {
                controller.Execute(context.Request.RequestContext);
            }
        }
    }

創建自定義路由時,請使用帶有IRouteHandlerRoute構造函數重載

我找到了這個博客,並使用簡單的NuGet包將舊路由重定向到新路由

https://github.com/Haacked/RouteMagic

和這篇博客文章

http://haacked.com/archive/2011/02/02/redirecting-routes-to-maintain-persistent-urls.aspx/

謝謝@jpishko的幫助:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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