我试图使用MVC生成一个简单的WebDAV服务器,我终于到了需要向用户提供所请求文件的阶段.
我有一个路由设置,处理遍历目录结构"webdav/{*path}"工作正常,直到该路径以文件名结束的点.此时,IIS似乎确定它是静态文件,并尝试从磁盘提供该文件.由于它不在URL中指定的位置,因此返回404错误.
我没有任何更改URL的自由,我基本上需要它在表单中,否则Windows资源管理器无法使用它作为映射驱动器:
GET /webdav/Test/Test2.txt
Run Code Online (Sandbox Code Playgroud)
我已经设置了贪婪匹配的路由,因为目录结构可以有多个级别.我也定了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 }
);
Run Code Online (Sandbox Code Playgroud)
所以,要/webdav/Test/Test2在我的控制器中击中断点,但是/webdav/Test/Test2.txt会给我一个404.
有什么建议?
Pau*_*tti 12
我需要补充一下
<modules runAllManagedModulesForAllRequests="true">
Run Code Online (Sandbox Code Playgroud)
到网络配置.
啊,我已经在这几天苦苦挣扎了,我知道在这里张贴会改变堵塞!
另一种选择是将其添加到 web.config 中的 <system.webserver> 节点:
<modules>
<remove name="UrlRoutingModule-4.0" />
<add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
</modules>
Run Code Online (Sandbox Code Playgroud)
我可以保证这可以在 IIS 7.5 上运行。
作为记录,我在这里找到了这个解决方案。
| 归档时间: |
|
| 查看次数: |
3499 次 |
| 最近记录: |