路由包含.svc扩展名时,ASP.Net MVC 404错误

Jus*_*tin 2 asp.net-mvc iis-7

我在IIS7下使用集成管道设置了ASP.Net MVC 2站点,路由如下:

routes.MapRoute(
    "MyRoute",
    "mycontroller/{name}/{*path}",
    new { controller = "MyController", action = "Index", path = UrlParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)

此路由上方没有其他路由,但每当我尝试使用具有.svc扩展名的路径值访问上述路由时,例如:

HTTP://localhost/MyVirtualDirectory/mycontroller/test/somepath.svc

ASP.Net在不执行我的控制器的情况下返回404错误(我在操作方法的开头有一个日志消息调用).如果我将扩展名更改为良性(例如.txt)它可以完美地运行,那么沿着ASP.Net行的某个地方似乎将请求解释为对不存在的Web服务的标准ASP.Net调用 - 这是绝对是ASP.Net 404响应(不是IIS响应).

可能导致这种情况的原因是什么?如何阻止它发生?

Dav*_*enn 5

IIS是否配置为服务器.svc文件?您可能需要将.svc MIME类型添加到IIS

在IIS中

  1. 选择您的网站
  2. 单击MIME类型
  3. 单击"添加"以添加.svc MIME类型

更新

试试这个答案

您遇到的问题是由于.svc文件注册的构建提供程序.此构建提供程序由默认的机器级web.config文件注册.

更新您的web.config

<system.web>
  <compilation debug="true" targetFramework="4.0">
    <buildProviders>
        <remove extension=".svc"/>            
    </buildProviders>
Run Code Online (Sandbox Code Playgroud)

Phil Haack关于这个问题的全文