C# 如何基于对照查找表检查的URL调用ASP.NETMVC?

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请求,并将它们发送到某个控制器->操作 我应该怎么做呢?我认为您

在我独特的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,并将结果缓存到某个地方,以便您可以在此处使用它。