Asp.net web api 在属性路由中包含额外段时,在ASP.NET WebAPI应用程序中接收403

Asp.net web api 在属性路由中包含额外段时,在ASP.NET WebAPI应用程序中接收403,asp.net-web-api,Asp.net Web Api,在我的ASP.NET WebAPI控制器中,以下路由设置正常工作: [Route("api/products")] public class ProductsController : ApiController { [HttpGet] public IHttpActionResult Get() { return Ok(); } } 但是,当我将路由更改为api/catalog/products时,我在访问路由时开始收到403个错误。为什么那个额

在我的ASP.NET WebAPI控制器中,以下路由设置正常工作:

[Route("api/products")]
public class ProductsController : ApiController
{
    [HttpGet]
    public IHttpActionResult Get()
    {
        return Ok();
    }
}
但是,当我将路由更改为
api/catalog/products
时,我在访问路由时开始收到403个错误。为什么那个额外的段会导致403错误,我如何修复它

这是我的配置:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.MapHttpAttributeRoutes();
    }
}

首先,我建议您按照建议的格式更新属性路由

[RoutePrefix("api/products")]
public class ProductsController : ApiController {    
    //GET api/products
    [HttpGet]
    [Route("")] //(Default route)
    public IHttpActionResult Get() {
        return Ok();
    }
}
使用ApiController上的属性并在操作上添加属性的

接下来,
403禁止
通常发生在您尝试浏览到网站上未启用目录浏览功能且未配置默认文档的目录时

在这种情况下,您的实际文件夹可能与ProductsController的默认路由冲突

当您更新路由并尝试调用
api/catalog/products
时,它将尝试返回该文件夹的实际内容,如果未启用该功能,该文件夹将失败

删除或重命名文件夹,使其与任何控制器路由都不冲突


参考

项目中是否有api文件夹?请澄清我更改路线时您所说的
是什么意思
。您是指控制器上的
[Route(“api/catalog/products”)]
,还是指当您尝试浏览
api/catalog/products
时,如果您有与请求路径匹配的实际文件夹,则会发生403。