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

时间:2011-02-18 06:53:12

标签: asp.net-mvc iis-7

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

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

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

  

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

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

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

1 个答案:

答案 0 :(得分:5)

IIS是否配置为服务器.svc文件?您可能需要add the .svc MIME type到IIS

在IIS中

  1. 选择您的网站
  2. 点击MIME类型
  3. 点击“添加”以添加.svc MIME类型
  4. <强>更新

    尝试this answer

      

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

    更新您的web.config

    <system.web>
      <compilation debug="true" targetFramework="4.0">
        <buildProviders>
            <remove extension=".svc"/>            
        </buildProviders>
    

    Phil Haack's full post on the issue