【问题标题】:Web API 2 does not say unauthorized when HTTP method not supported当不支持 HTTP 方法时,Web API 2 不会说未经授权
【发布时间】:2018-10-06 20:58:44
【问题描述】:

我刚刚在测试一个新的POST方法,不小心发送了一个未经授权的GET请求,得到的响应是:

"message": "The requested resource does not support http method 'GET'."

但是当我发送一个 POST 请求时,我得到了这个响应:

"message": "Authorization has been denied for this request."

如果我未获得授权甚至未通过身份验证,我不应该收到未经授权的消息吗?

方法如下:

[Route("api/search"), HttpPost, Authorize]
public async Task<IHttpActionResult> Search()
{
   ...
}

我尝试过装饰控制器和带有[Authorize] 属性的方法,并且我还设置了一个全局过滤器。

【问题讨论】:

    标签: c# .net asp.net-web-api2 authorization bearer-token


    【解决方案1】:

    您收到的GET 的消息完全准确。您没有 GET 修饰操作,因此 The requested resource does not support http method 'GET'

    由于 API 必须首先尝试找到与您的请求签名匹配的方法,因此您对获得未授权的担忧不起作用。因为它找不到GET,所以它返回错误。

    【讨论】:

    • 所以这是设计使然,我猜这是意料之中的。不过我很惊讶,因为我想 WebAPI 应该有可能在做任何其他事情之前就已经知道我是否被授权,我希望无论如何都会得到未经授权的错误,因此不会有任何信息从 API 中泄露出来被恶意使用.
    • 路由显然首先发生。我没有文档来支持它,但根据行为,情况似乎如此。
    猜你喜欢
    • 2018-07-01
    • 2015-05-28
    • 2019-05-16
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多