在ASP.Net MVC中路由之前的数据库选择

我正在寻找asp.net mvc 4中的一种方法,在任何路由发生之前从web.config中选择数据库设置,比如在codeigniter(php)中预先路由挂钩。 保存那些设置会话或上下文对象的最佳方法是什么? PS我是asp.net mvc的新手。

像这里提到的php代码: 在每个路由运行之前运行数据库查询

您是否要求从Web.Config或数据库获取值? 这有点令人困惑,但这里有一些代码可以做到这两点。

你可以创建自己的路由处理程序,在这里你可以做你想要的任何东西。 然后在RouteConfig.cs中,确保使用自己的Route Handler。

这是MyRouteHander.cs

 using System; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Routing; namespace My.Services { public class MyRouteHander : IRouteHandler { ApplicationDbContext Db = new ApplicationDbContext(); public IHttpHandler GetHttpHandler(RequestContext requestContext) { // Get route data values var routeData = requestContext.RouteData; var action = routeData.GetRequiredString("action"); var controller = routeData.GetRequiredString("controller"); // Get webconfig settings var webConfigSetting = ConfigurationManager.AppSettings["SOME_FANCY_SETTING"] if (!string.IsNullOrEmpty(webConfigSetting)) { requestContext.RouteData.Values["action"] = webConfigSetting; return new MvcHandler(requestContext); } // If we have SomeDataBaseTable hit we do something else. if (Db.SomeDataBaseTable.Any(x => x.Action == action)) { // Lets do something with the requestContext. string actionName = "SpecialAction"; requestContext.RouteData.Values["action"] = actionName; requestContext.RouteData.Values["controller"] = "SpecialController"; requestContext.RouteData.Values.Add("id", Db.SomeDataBaseTable.FirstOrDefault(x => x.Action == action).Id); } return new MvcHandler(requestContext); } } } 

App_Start / RouteConfig.cs更新routes.MapRoute(),因此它使用你的MyRouteHander。

 routes.MapRoute( "Home", "Home/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional }, new[] { "MyProject.Controllers" } ).RouteHandler = new MyRouteHander(); routes.MapRoute( "Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional }, new[] { "MyProject.Controllers" } ).RouteHandler = new MyRouteHander(); ... 

希望这可以帮助!