【发布时间】:2015-01-10 04:21:45
【问题描述】:
我基本上有一个开箱即用的 MVC 5.2 应用程序,启用了基于属性的路由(从提供的 RouteConfig.RegisterRoutes(RouteCollection routes) 方法调用 routes.MapMvcAttributeRoutes();)。
HomeController 中有以下内容:
[Route("hello.txt")]
[Route("hellotxt-testing")]
public ActionResult ShowFile()
{
return Content("Hello world");
}
我可以成功访问/hellotxt-testing(证明基于属性的路由工作正常):
但是如果我访问/hello.txt,我会得到一个 404 页面:
与我转到 /hello404 时相比,我得到了不同的 404 页面:
我猜第二个 404 页面来自 ASP.NET,而第一个来自 IIS,它甚至没有将请求传递给 ASP.NET?
如何确保我可以确保 ASP.NET 获取这些带有句点的 URL?是否还有其他“特殊”字符也会导致问题?
【问题讨论】:
-
该修复实际上需要对每个可能包含句点的路径进行 web.config 修改。这对我来说似乎很疯狂,必须有更好的方法。 ASP.NET 已经有一个所有可能的 URL 模式的列表(路由表)。我原以为 ASP.NET 应该负责确保 IIS 通过这些(也许 ASP.NET 6 添加了这个?).. 但除此之外,是否有可能动态地做到这一点(例如,编写一个注册所有已知路由的处理程序IIS),或者是否存在阻止其工作的限制?
-
你试过
<httpRuntime relaxedUrlToFileSystemMapping="true"/>吗? -
我想我会很好奇为什么你会想要这个?除此之外,正如某人已经指定的那样,路由忽略静态路径(因此 IIS 可以执行诸如将图像和静态文件传递到浏览器之类的事情)。这几乎是一个特殊的情况,“忽略看起来像静态文件的东西”“路由”出现在 hello.txt 路由之前并首先解析。 @rexilion 的答案有很多选择。
标签: asp.net-mvc iis iis-8 attributerouting asp.net-mvc-5.2