【问题标题】:ASP.Net MVC 404 errors when route contains an .svc extension路由包含 .svc 扩展名时出现 ASP.Net MVC 404 错误
【发布时间】:2011-02-18 06:53:11
【问题描述】:

我在 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 响应)。

什么可能导致这种情况,我该如何阻止它发生?

【问题讨论】:

标签: asp.net-mvc iis-7


【解决方案1】:

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

在 IIS 中

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

更新

试试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

【讨论】:

  • 试过了 - 它没有任何效果 - 如果我使用未知的扩展名(如 .bob),它也可以正常工作。
  • 好的,这可以在默认的新应用程序模板中复制,所以我快速浏览了一下并找到了更多信息。我已经更新了我的答案。
  • 构建提供者做到了。
猜你喜欢
  • 1970-01-01
  • 2010-10-30
  • 2016-07-30
  • 1970-01-01
  • 2012-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-09
相关资源
最近更新 更多