我可以在web.config中存储ASP.NET MVC路由吗?

时间:2009-04-21 16:33:30

标签: asp.net-mvc routing web-config

除了Global.asax类之外,我正在寻找一种在我的web.config文件中存储路由信息的方法。存储在配置文件中的路由需要比以编程方式添加的路由更高的优先级。

我已经完成了我的搜索,但我能提出的最接近的是Codeplex上的RouteBuilder(http://www.codeplex.com/RouteBuilder),但这不适用于MVC的RTM版本。那里的解决方案是否与最终的1.0兼容?

2 个答案:

答案 0 :(得分:1)

我不能保证以下代码可以正常工作,但它构建:)将RouteBuilder.cs中的Init方法更改为以下代码:

    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.MvcSystem.Web.Routing作为参考。

答案 1 :(得分:1)