Могу ли я хранить маршруты ASP.NET MVC в web.config? - PullRequest
2 голосов
/ 21 апреля 2009

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

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

Ответы [ 2 ]

1 голос
/ 04 августа 2010
1 голос
/ 21 апреля 2009

Я не могу гарантировать, что следующий код будет работать, но он собирается :) Измените метод 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 в качестве ссылок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...