403.14 - 当 IIS 中的控制器名称和控制器目录名称相同时禁止

seU*_*ser 2 c# asp.net-mvc iis-7.5 .net-4.5 asp.net-web-api2

我有以下代码,其中我的控制器名称是 Customer,它是我的 web api 2 项目中 Customer 目录的一部分。似乎 IIS 不允许我使用相同的目录名称和控制器名称,因为它为 get 调用(https://hostname:443/myapp/customers)抛出错误 403 。我认为在部署代码后这不会成为问题,但为了在我的本地机器上调试,我怎样才能让它在我的本地工作?

[RoutePrefix(RoutePrefix)]
public class CustomersController : ApiController
{
    const string RoutePrefix = @"customers";

    private readonly ICustomersData _customersData;

    public CustomersController(ICustomersData customersData
    {
        _customersData = customersData
    }

    /// <summary>
    /// Get Customers
    /// </summary>
    /// <returns>Customers</returns>
    [ResponseType(typeof(Customer[]))]
    [HttpGet, Route("")]
    public IHttpActionResult GetCustomers()
    {
        var customers = _customersData.GetCustomers();

        return Ok(customers);
    }
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*idG 6

路由系统检查文件系统以查看 URL 是否与磁盘上的文件/文件夹匹配。如果找到匹配项,则忽略路由并且请求绕过任何路由条目,以便直接提供文件。这对于静态 HTML、JS、图像等很重要。

所以在这种情况下,控制器文件夹匹配 URL 并尝试改为服务器目录的内容。要解决此问题,您可以在路由配置中将该RouteExistingFiles属性设置为true

routes.RouteExistingFiles = true;
Run Code Online (Sandbox Code Playgroud)