9

我正在尝试使用 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在我的控制器中命中断点,但要给/webdav/Test/Test2.txt我一个 404。

有什么建议么?

4

2 回答 2

12

我需要添加

<modules runAllManagedModulesForAllRequests="true">

到网络配置。

啊,我这几天一直在苦苦挣扎,我知道在这里发帖会转移阻塞!

于 2012-09-17T16:26:14.097 回答
3

另一种选择是将其添加到 web.config 中的 <system.webserver> 节点:

<modules>
  <remove name="UrlRoutingModule-4.0" />
  <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
</modules>

我可以保证这适用于 IIS 7.5。

作为记录,我在这里找到了这个解决方案。

于 2013-12-24T21:00:02.737 回答