Asp.net 创建一个与控制器同名的文件夹会导致404-WebAPI2

Asp.net 创建一个与控制器同名的文件夹会导致404-WebAPI2,asp.net,iis,asp.net-web-api2,Asp.net,Iis,Asp.net Web Api2,如果创建的根级文件夹与控制器具有相同的名称/路由,IIS似乎会尝试路由到该文件夹,而不会咨询WebAPI 2路由 示例: ProjectA |- Controllers/ |-- ExamplesController.cs |- Examples/ 示例控制器 [RoutePrefix("examples")] public class ExamplesController : ApiController { [HttpGet] [Route("")] public asyn

如果创建的根级文件夹与控制器具有相同的名称/路由,IIS似乎会尝试路由到该文件夹,而不会咨询WebAPI 2路由

示例:

ProjectA
|- Controllers/
|-- ExamplesController.cs
|- Examples/
示例控制器

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

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

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

routes.RouteExistingFiles = true;

很好,我会尝试一下,如果它真的像描述的那样有效,就把它标记为答案。你试过这个吗?有什么问题吗?这和预期的一样,但只是因为我们不提供来自API的任何静态内容。如果您需要同时提供无扩展路由和静态内容,则可能会变得更加棘手。
routes.RouteExistingFiles = true;