繁体   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