ASP.NET Routing - GetRouteData не работает, если путь существует - PullRequest
4 голосов
/ 02 мая 2011

У меня есть HttpModule, который перехватывает все запросы и загружает данные из базы данных на основе правил маршрутизации. Однако я постоянно сталкиваюсь с одной проблемой; GetRouteData работает только если путь не существует:

var routeData = RouteTable.Routes.GetRouteData(new HttpContextWrapper(HttpContext.Current));

Предполагая, что поступил запрос для URL http://localhost/contact, я получаю правильные данные маршрутизации, относящиеся к этому URL, если этот путь не существует в файловой системе. Проблема возникает, когда я хочу настроить страницу по тому URL, который я делаю, создав страницу aspx по пути ~/contact/default.aspx. Как только я это сделаю, GetRouteData возврат null.

Я даже пытался создать новый HttpContext объект, но я все еще не могу получить данные маршрута, если страница существует.

Кто-нибудь когда-нибудь сталкивался с этой проблемой? Есть ли решение / обходной путь?

Любая помощь будет принята с благодарностью.

1 Ответ

3 голосов
/ 02 мая 2011

Установите RouteCollection.RouteExistingFiles в true.

public static void RegisterRoutes(RouteCollection routes)
{
    // Cause paths to be routed even if they exists physically
    routes.RouteExistingFiles = true;

    // Map routes
    routes.MapPageRoute("...", "...", "...");
}

Осторожно, хотя. IIS7 ведет себя немного иначе, чем сервер, используемый при отладке в Visual Studio. Я получил немного от этого, когда я развернул свое приложение в Интернете. Ознакомьтесь с отзывами, которые я отправил в Microsoft Connection .

...