[英]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);
}
}
}
創建自定義路由時,請使用帶有IRouteHandler
的Route
構造函數重載
我找到了這個博客,並使用簡單的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.