2009-04-21 4 views
2

Я ищу способ хранения информации о маршрутизации в файле web.config в дополнение к классу Global.asax. Маршруты, хранящиеся в файле конфигурации, должны иметь более высокий приоритет, чем те, которые добавлены программно.Могу ли я хранить маршруты ASP.NET MVC в web.config?

Я выполнил свой поиск, но ближе всего я могу найти RouteBuilder на Codeplex (http://www.codeplex.com/RouteBuilder), но это не работает с RTM-версией MVC. Существует ли решение, совместимое с окончательным 1.0?

ответ

1

Я не могу гарантировать, следующий код будет работать, но он строит :) Изменение метода Init в RouteBuilder.cs к следующему:

public void Init(HttpApplication application) 
    {     
     // Grab the Routes from Web.config 
     RouteConfiguration routeConfig = 
      (RouteConfiguration)System.Configuration.ConfigurationManager.GetSection("RouteTable"); 

     // Add each Route to RouteTable 
     foreach (RouteElement routeElement in routeConfig.Routes) 
     { 
      RouteValueDictionary defaults = new RouteValueDictionary(); 

      string[] defaultsArray = routeElement.Defaults.Trim().Split(','); 

      if (defaultsArray.Length > 0) 
      { 
       foreach (string defaultEntry in defaultsArray) 
       { 
        string[] defaultsEntryArray = defaultEntry.Trim().Split('='); 

        if ((defaultsEntryArray.Length % 2) != 0) 
        { 
         throw new ArgumentException("RouteBuilder: All Keys in Defaults must have values!"); 
        } 
        else 
        { 
         defaults.Add(defaultsEntryArray[0], defaultsEntryArray[1]); 
        } 
       } 
      } 
      else 
      { 
       throw new ArgumentException("RouteBuilder: Defaults value is empty or malformed."); 
      } 

      Route currentRoute = new Route(routeElement.Url, defaults, new MvcRouteHandler()); 
      RouteTable.Routes.Add(currentRoute); 
     } 
    } 

Кроме того, не стесняйтесь, чтобы удалить класс DefaultsType. Это было необходимо, потому что система по умолчанию была намного сложнее в CTP, чем в RTM.

Редактировать: Оставьте и добавьте using System.Web.Routing; в начало страницы и не забудьте добавить System.Web.Mvc и System.Web.Routing в качестве ссылок.