创建与控制器同名的文件夹将导致404 - Web API 2

时间:2016-09-16 15:23:42

标签: asp.net iis asp.net-web-api2

如果创建一个与控制器具有相同名称/路由的根级文件夹,IIS似乎尝试路由到该文件夹​​而不参考WebAPI 2路由。

示例:

ProjectA
|- Controllers/
|-- ExamplesController.cs
|- Examples/

ExamplesController

[RoutePrefix("examples")]
public class ExamplesController : ApiController
{
   [HttpGet]
   [Route("")]
   public async Task<IHttpActionResult> Get()
   {
    // code
   }
}

期望是点击控制器,但IIS似乎尝试浏览文件夹。

示例:http://localhost:123/examples

尝试解决方案:

我试图玩IIS处理程序,看看我是否可以删除所有其他处理程序但是没有帮助

的Web.config

<system.webServer>
  <modules>
    <remove name="WebDAVModule" />
  </modules>
  <handlers>
    <clear/>
    <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
  </handlers>
</system.webServer>

1 个答案:

答案 0 :(得分:1)

路由系统检查文件系统以查看URL是否与磁盘上的文件/文件夹匹配。如果找到匹配项,则忽略路由,并且请求绕过任何路由条目,以便直接提供文件。这样就可以在不通过MVC路由

的情况下提供静态文件

要更改此行为,您可以在RouteConfig中将RouteExistingFiles属性设置为true,但这可能会影响您的静态文件,因此请彻底测试它们

routes.RouteExistingFiles = true;