在属性路由中包含额外的段时在ASP.NET WebAPI应用程序中接收403

时间:2018-11-06 03:02:23

标签: asp.net-web-api

在我的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();
    }
}

1 个答案:

答案 0 :(得分:1)

首先,我建议您更新属性路由以遵循建议的格式

[RoutePrefix("api/products")]
public class ProductsController : ApiController {    
    //GET api/products
    [HttpGet]
    [Route("")] //(Default route)
    public IHttpActionResult Get() {
        return Ok();
    }
}

使用ApiController上的[RoutePrefix]属性,并在操作上添加[Route]属性。

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

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

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

将文件夹删除或重命名为与您的任何控制器路由都没有冲突的文件夹。

引用Attribute Routing in ASP.NET Web API 2