Маршрут для корневого адреса в веб-формах asp.net - PullRequest
2 голосов
/ 12 марта 2012

у меня есть следующий метод RegisterRoutes в global.asax моего приложения веб-форм`

routes.MapPageRoute("about", "about", "~/about.aspx");
            routes.Add(
            "root",
            new Route("", new RootRouteHandler())
            );

Первый маршрут работает нормально, т. Е. Когда я набираю http://localhost:9898/about, но когда я иду на корневой адрес, такой как 'http://localhost:9898', он не вызывает RootRouteHandler. это код для обработчика маршрута

public class RootRouteHandler : IRouteHandler
    {
        public IHttpHandler GetHttpHandler(RequestContext requestContext)
        {
            var address = requestContext.HttpContext.Request.Headers["host"];
            string host = string.Empty;
            var index = address.IndexOf('.');
            if(index>0)
            {
                host = address.Substring(0, index);
            }
            var virtualPath = string.Format("~/{0}/default.aspx", host);
            var page = BuildManager.CreateInstanceFromVirtualPath(virtualPath, typeof(Page)) as Page;
            return page;
        }
    }

* Редактировать: *, когда я добавляю маршрут как

routes.Add("root",new Route("default",new RootRouteHandler());

тогда обработчик нормально вызывается для адреса http://localhost:9898/default, но мне нужно, чтобы он работал для корневого адреса. есть идеи?

1 Ответ

0 голосов
/ 12 марта 2012

Я думаю, что вам нужно создать новую базу RouteBase для маршрутизации на хост и переопределить метод GetRouteData.Рассмотрите возможность получения из RouteBase и предоставьте функциональность для маршрута на основе хоста и добавьте его в RouteCollection.

http://msdn.microsoft.com/en-us/library/system.web.routing.routebase.aspx

...