使用默认路由

时间:2017-06-17 18:01:09

标签: asp.net asp.net-mvc

我有点问题

我有一个运行良好的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工作的旧链接。

你会推荐什么?我该如何解决这个问题?

有没有更好的方法来做路线而不是自定义路线?

2 个答案:

答案 0 :(得分:0)

听起来这可能是自定义路由处理程序的一个好例子。在下面的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);
            }
        }
    }

创建自定义路由时,请使用Route

IRouteHandler构造函数重载

答案 1 :(得分:0)

我找到了这个博客,并使用简单的NuGet包将旧路由重定向到新路径

https://github.com/Haacked/RouteMagic

和这篇博客文章

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

谢谢@jpishko的帮助:)