2016-02-09 4 views
0

У меня есть следующие маршруты в моем приложении ASP.NET MVC:ASP.NET MVC4 «хочет» хвостохранилище слэш для моего пользовательского маршрута

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    routes.MapRoute(
     name: "AppCode", 
     url: "AppCode", 
     defaults: new { controller = "AppToken", action = "AuthenticateUser", authCode = UrlParameter.Optional } 
    ); 

    routes.MapRoute(
     name: "ReplayFileRoute", 
     url: "Replays/{replayName}/{fileName}", 
     defaults: new { controller = "Replay", action = "GetReplayFile" } 
    ); 

    routes.MapRoute(
     name: "Default", 
     url: "{controller}/{action}/{id}", 
     defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
    ); 
} 

Проблема заключается в том, что в настоящее время следующий URL будет вызывать 404, и -действие "GetReplayFile" не должны быть выполнены:

http://localhost:59174/Replays/kgm3eauw.zbg/raha5qit.ikp.pls

Однако следующий URL работы:

http://localhost:59174/Replays/kgm3eauw.zbg/raha5qit.ikp.pls/

Так что, когда я добавить хвостохранилища слэш, ASP выбирает правильный маршрут, иначе это не делает. Добавление косой черты в данный момент не является опцией, поскольку URL-адреса будут сгенерированы внешним скриптом. Я прохожу только

http://localhost:59174/Replays/kgm3eauw.zbg/ 

к скрипту, фактическое имя файла будет сгенерировано скриптом - без косой черты.

Так что мой вопрос: как мне сделать первый URL-адрес для вызова «правильного» метода?

Также: Есть ли какая-либо документация о том, как работает RouteConfig? Я пока не нашел много.

+0

[Документация для MVC маршрутизации] (https://msdn.microsoft.com/en-us/library/cc668201.aspx) – NightOwl888

ответ

0

Я предполагаю, что проблема заключается в том, что ваш URL-адрес указывает на файл и обходит механизм маршрутизации ASP.NET MVC. Вы должны разрешить все запросы пройти через ASP.NET, чтобы они соответствовали URL-адресам, которые также выглядят как файл.

Вы можете установить это в своем файле web.config. Добавьте это:

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"/> 
</system.webServer> 
Смежные вопросы