403.14 - 在 IIS 中控制器名称和控制器目录名称相同时禁止访问
403.14 - Forbidden when controller name and controller directory name is same in IIS
我有以下代码,其中我的控制器名称是 Customer,它是我的 web api 2 项目中 Customer 目录的一部分。似乎 IIS 不允许我使用相同的目录名称和控制器名称,因为它为 get 调用抛出错误 403 (https://hostname:443/myapp/customers)。我认为这在部署代码后不会成为问题,但为了在我的本地机器上进行调试,我怎样才能让它在我的本地机器上运行?
[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);
}
}
路由系统检查文件系统以查看 URL 是否与磁盘上的 file/folder 匹配。如果找到匹配项,路由将被忽略并且请求绕过任何路由条目,以便直接提供文件。这对于静态 HTML、JS、图像等很重要
所以在这种情况下,控制器文件夹与 URL 匹配并尝试服务器目录的内容。要解决此问题,您可以在路由配置中将 RouteExistingFiles
属性 设置为 true
:
routes.RouteExistingFiles = true;
我有以下代码,其中我的控制器名称是 Customer,它是我的 web api 2 项目中 Customer 目录的一部分。似乎 IIS 不允许我使用相同的目录名称和控制器名称,因为它为 get 调用抛出错误 403 (https://hostname:443/myapp/customers)。我认为这在部署代码后不会成为问题,但为了在我的本地机器上进行调试,我怎样才能让它在我的本地机器上运行?
[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);
}
}
路由系统检查文件系统以查看 URL 是否与磁盘上的 file/folder 匹配。如果找到匹配项,路由将被忽略并且请求绕过任何路由条目,以便直接提供文件。这对于静态 HTML、JS、图像等很重要
所以在这种情况下,控制器文件夹与 URL 匹配并尝试服务器目录的内容。要解决此问题,您可以在路由配置中将 RouteExistingFiles
属性 设置为 true
:
routes.RouteExistingFiles = true;