示例#1
0
        /// <summary>
        /// This was copied from System.Web.Mvc.RouteCollectionExtensions and
        /// modified slightly.  The original function declares the defaults
        /// and constraints parameters as object type, which causes the wrong
        /// overload of RouteValueDictionary to be invoked, causing values in
        /// the dictionaries not to be set properly.  The modified version
        /// declares these parameters as Dictionary&lt;string, object&gt;,
        /// fixing the problem.
        /// </summary>
        /// <param name="routes"></param>
        /// <param name="name"></param>
        /// <param name="url"></param>
        /// <param name="defaults"></param>
        /// <param name="constraints"></param>
        /// <param name="namespaces"></param>
        /// <returns></returns>
        private static Route MapRoute(RouteCollection routes, string name, string url, Dictionary<string, object> defaults, Dictionary<string, object> constraints, string[] namespaces)
        {
            if (routes == null)
            {
                throw new ArgumentNullException("routes");
            }
            if (url == null)
            {
                throw new ArgumentNullException("url");
            }
            if (constraints == null)
            {
                throw new ArgumentNullException("constraints");
            }

            Route route = new Route(url, new MvcRouteHandler())
            {
                Defaults = new RouteValueDictionary(defaults),
                Constraints = new RouteValueDictionary(constraints)
            };

            route.DataTokens = new RouteValueDictionary();

            if (!String.IsNullOrEmpty(name))
            {
                route.SetRouteName(name);
            }

            if ((namespaces != null) && (namespaces.Length > 0))
            {
                route.DataTokens["Namespaces"] = namespaces;
            }

            routes.Add(name, route);

            return route;
        }