如果创建一个与控制器具有相同名称/路由的根级文件夹,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>
答案 0 :(得分:1)
路由系统检查文件系统以查看URL是否与磁盘上的文件/文件夹匹配。如果找到匹配项,则忽略路由,并且请求绕过任何路由条目,以便直接提供文件。这样就可以在不通过MVC路由
的情况下提供静态文件要更改此行为,您可以在RouteConfig中将RouteExistingFiles属性设置为true,但这可能会影响您的静态文件,因此请彻底测试它们
routes.RouteExistingFiles = true;