我的ASP.NET MVC应用程序中有以下路由:
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”-Action不会被执行:
http://localhost:59174/Replays/kgm3eauw.zbg/raha5qit.ikp.pls
但是,以下网址有效:
http://localhost:59174/Replays/kgm3eauw.zbg/raha5qit.ikp.pls/
所以当我添加一个拖尾斜线时,ASP会选择正确的路线,否则就不会。目前不能添加尾部斜杠,因为URL将由外部脚本生成。我只传递
http://localhost:59174/Replays/kgm3eauw.zbg/
到脚本,脚本将生成实际文件名 - 没有尾部斜杠。
所以我的问题是:如何让第一个URL调用“正确”方法?
另外:有没有关于RouteConfig如何正常工作的文档?到目前为止我还没有找到太多东西。
答案 0 :(得分:0)
我想问题是希望你的URL指向一个文件并绕过ASP.NET MVC路由引擎。您必须让所有请求通过ASP.NET,以使其与看起来像文件的URL匹配。
您可以在web.config
文件中进行设置。加上这个:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>