我正在尝试使用 MVC 生成一个简单的 WebDAV 服务器,我终于达到了需要向用户提供请求的文件的阶段。
我设置了一条处理遍历目录结构的路线 "webdav/{*path}"
工作正常,直到该路径以文件名结束为止。此时,IIS 似乎确定它是静态文件,并尝试从磁盘提供该文件。由于它不在 URL 中指定的位置,因此返回 404 错误。
我没有任何更改 url 的自由,我基本上需要它采用表单形式,否则 Windows 资源管理器无法将其用作映射驱动器:
GET /webdav/Test/Test2.txt
我已将路由设置为贪婪匹配,因为目录结构可以有多个级别。我还设置了routes.RouteExistingFiles = true;
这是在我的开发计算机上使用 IIS Express 8.0。
我已经设置了一个空白的 MVC 项目来测试这一点,这就是 RegisterRoutes 方法:
routes.RouteExistingFiles = true;
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "WebDAVGet",
url: "webdav/{*path}",
defaults: new { controller = "WebDAV", action = "Get", path = "" });
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index",
id = UrlParameter.Optional }
);
所以,转到 /webdav/Test/Test2
在我的 Controller 中遇到断点,但转到 /webdav/Test/Test2.txt
给我一个 404。
有什么建议吗?
最佳答案
我需要添加
<modules runAllManagedModulesForAllRequests="true">
到网络配置。
啊,我已经为此苦苦挣扎了几天,我知道在这里发帖会改变阻塞!
关于asp.net-mvc - MVC 路由捕获文件名作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12463021/