【问题标题】:403.14 - Forbidden when controller name and controller directory name is same in IIS403.14 - 当控制器名称和控制器目录名称在 IIS 中相同时被禁止
【发布时间】:2015-08-03 14:11:06
【问题描述】:

我有以下代码,其中我的控制器名称是客户,它是我的 web api 2 项目中客户目录的一部分。似乎 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);
    }
}

【问题讨论】:

  • 客户文件夹使用不同的名称怎么样?
  • 这段代码有一些奇怪的东西。构造函数没有右括号。该构造函数中的一个语句有一个“;=”。那是什么?我不认识它。这甚至是如何编译的?
  • 什么时候出现这个错误?尝试访问其中一种 API 方法?
  • @DavidG 这很容易解决,但正如我所说,当我部署代码时这不会出现问题,但仅在本地 IIS 中点击目录名称而不是控制器,所以我不想使用不同的名称.
  • @seUser 路由系统始终假定现有文件和文件夹将优先于路由 URL 使用。您可以尝试在路由配置中指定routes.RouteExistingFiles = true;

标签: c# asp.net-mvc iis-7.5 .net-4.5 asp.net-web-api2


【解决方案1】:

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

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

routes.RouteExistingFiles = true;

【讨论】:

  • 感谢@DavidG 提供了我一直在寻找的完美解决方案!
猜你喜欢
  • 2012-11-04
  • 1970-01-01
  • 1970-01-01
  • 2017-03-08
  • 1970-01-01
  • 2015-06-20
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
相关资源
最近更新 更多