如何根据查找表检查的URL调用ASP.Net MVC?

Cyr*_*pta 1 c# asp.net-mvc routing

我在我独特的ASP.Net MVC项目中有一个独特的要求.基本上我们正在将一个较旧的基于Linux的网站迁移到MVC,我们希望保留最后一个网站上的URL.

为网站的子目录(例如'www.mywebsite.com/pickes/cherry-pickle-recipe.html')创建新的控制器是不切实际的.

所以我想做以下其中一项

  1. 为URL创建查找列表.应根据数据库检查URL,如果找到URL,则应从某个控制器返回某个操作.

  2. 捕获没有控制器的所有url请求并将它们发送到某个控制器 - >动作.

我该怎么办呢?

Muh*_*hid 5

我想你可以通过实现IRouteHandlerInterface编写自定义路由处理程序来实现这一点

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

你还需要做一件事,即在global.asax中注册你的路由处理程序

routes.MapRoute(
   "dbroute",
   "{controller}/{action}/{id}",
   new {  id = "" }
   ).RouteHandler = new LookupRouteHandler();
Run Code Online (Sandbox Code Playgroud)

  • 值得一提的是 - 在app启动时的global.asax.cs中,为查询表命中一次db,并将结果缓存到某处,这样你就可以在这里使用了. (3认同)