您是要求从 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();
...
希望这会有所帮助!