Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 403.14-当IIS中的控制器名称和控制器目录名称相同时禁止_C#_Asp.net Mvc_Iis 7.5_.net 4.5_Asp.net Web Api2 - Fatal编程技术网

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

C# 403.14-当IIS中的控制器名称和控制器目录名称相同时禁止,c#,asp.net-mvc,iis-7.5,.net-4.5,asp.net-web-api2,C#,Asp.net Mvc,Iis 7.5,.net 4.5,Asp.net Web Api2,我有下面的代码,其中我的控制器名称是Customer,它是我的WebAPI2项目中Customer目录的一部分。似乎IIS不允许我使用相同的目录名和控制器名,因为它正在为get call()抛出错误403。我认为在部署代码后这不会是一个问题,但是为了在我的本地机器上调试,我如何使它在我的本地机器上工作 [RoutePrefix(RoutePrefix)] public class CustomersController : ApiController { const string Rou

我有下面的代码,其中我的控制器名称是Customer,它是我的WebAPI2项目中Customer目录的一部分。似乎IIS不允许我使用相同的目录名和控制器名,因为它正在为get call()抛出错误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);
    }
}
[RoutePrefix(RoutePrefix)]
公共类CustomerController:ApicController
{
常量字符串RoutePrefix=@“客户”;
专用只读ICCustomersData(用户数据);
公共CustomerController(ICCustomersData CustomerData
{
_customersData=customersData
}
/// 
///吸引顾客
/// 
///顾客
[ResponseType(typeof(Customer[]))]
[HttpGet,Route(“”)
公共IHttpActionResult GetCustomers()
{
var customers=_customersData.GetCustomers();
返回Ok(客户);
}
}

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

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

routes.RouteExistingFiles = true;

为客户文件夹使用不同的名称如何?此代码有一些古怪的东西。构造函数没有右括号。该构造函数中的一条语句有一个“;=”。那是什么?我不认识。这是怎么编译的?你什么时候收到这个错误的?在尝试访问一个API方法时?@DavidG这很容易修复,但正如我所说的,当我部署代码时,这不会出现问题,但只会在本地IIS中命中目录名而不是控制器,所以我不想使用其他名称。@seUser路由系统始终假定现有文件和文件夹将优先于路由URL使用。您可以尝试在路由配置中指定
routes.routeeExistingFiles=true;
。感谢@DavidG为我提供了完美的解决方案!