C# 如何基于对照查找表检查的URL调用ASP.NETMVC?
在我独特的ASP.NETMVC项目中,我有一个独特的需求。基本上,我们正在将一个旧的基于Linux的网站迁移到MVC,我们希望保留上一个网站上的URL 为网站的子目录“www.mywebsite.com/pickes/cherry pickle recipe.html”创建新控制器是不实际的 所以我想做下面的一个 创建URL的查找列表。应该对照数据库检查URL,如果找到URL,应该从特定控制器返回特定操作 捕获所有没有控制器的url请求,并将它们发送到某个控制器->操作C# 如何基于对照查找表检查的URL调用ASP.NETMVC?,c#,asp.net-mvc,routing,C#,Asp.net Mvc,Routing,在我独特的ASP.NETMVC项目中,我有一个独特的需求。基本上,我们正在将一个旧的基于Linux的网站迁移到MVC,我们希望保留上一个网站上的URL 为网站的子目录“www.mywebsite.com/pickes/cherry pickle recipe.html”创建新控制器是不实际的 所以我想做下面的一个 创建URL的查找列表。应该对照数据库检查URL,如果找到URL,应该从特定控制器返回特定操作 捕获所有没有控制器的url请求,并将它们发送到某个控制器->操作 我应该怎么做呢?我认为您
我应该怎么做呢?我认为您可以通过实现IRouteHandlerInterface编写一个定制的routehandler来实现这一点
public class LookupRouteHandler : IRouteHandler
{
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
IRouteHandler handler = new MvcRouteHandler();
var vals = requestContext.RouteData.Values;
if(String.IsNullOrEmpty(vals["controller"])
{
// fetch action and controller from database
vals["controller"] = dbcontroller;
vals["action"] = dbaction;
}
return handler.GetHttpHandler(requestContext);
}
}
您还需要做一件事,即在global.asax中注册您的路由处理程序
routes.MapRoute(
"dbroute",
"{controller}/{action}/{id}",
new { id = "" }
).RouteHandler = new LookupRouteHandler();
我认为可以通过实现IRoutHandlerInterface编写一个定制的routehandler来实现这一点
public class LookupRouteHandler : IRouteHandler
{
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
IRouteHandler handler = new MvcRouteHandler();
var vals = requestContext.RouteData.Values;
if(String.IsNullOrEmpty(vals["controller"])
{
// fetch action and controller from database
vals["controller"] = dbcontroller;
vals["action"] = dbaction;
}
return handler.GetHttpHandler(requestContext);
}
}
您还需要做一件事,即在global.asax中注册您的路由处理程序
routes.MapRoute(
"dbroute",
"{controller}/{action}/{id}",
new { id = "" }
).RouteHandler = new LookupRouteHandler();
值得一提的是,在应用程序启动时的global.asax.cs中,点击一次查找表的db,并将结果缓存到某个地方,以便您可以在此处使用。值得一提的是,在应用程序启动时的global.asax.cs中,点击一次查找表的db,并将结果缓存到某个地方,以便您可以在此处使用它。