C# 当HTTP方法不受支持时,WebAPI2不表示未经授权

C# 当HTTP方法不受支持时,WebAPI2不表示未经授权,c#,.net,asp.net-web-api2,authorization,bearer-token,C#,.net,Asp.net Web Api2,Authorization,Bearer Token,我刚刚测试了一个新的POST方法,无意中发送了一个未经授权的GET请求,得到的响应是: "message": "The requested resource does not support http method 'GET'." 但当我发送一个POST请求时,我得到了以下回复: "message": "Authorization has been denied for this request." 如果我没有得到授权,甚至没有经过身份验证,我不应该得到未经授权的消息吗 方法如下: [Rou

我刚刚测试了一个新的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()
{
   ...
}
[路由(“api/搜索”),HttpPost,授权]
公共异步任务搜索()
{
...
}

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

您收到的关于
GET
的消息完全准确。您没有GET修饰操作,因此请求的资源不支持http方法“GET”


由于API必须首先尝试并找到一个与您的请求签名匹配的方法,因此您对获取未授权的方法的担心是行不通的。因为它找不到一个
GET
,所以它会返回相应的错误。

所以它是经过设计的,我想这是预期的。不过我还是很惊讶,因为我认为WebAPI在做任何事情之前应该已经知道我是否被授权了,所以我希望无论发生什么,都会出现未经授权的错误,这样就不会有信息从API中泄露出来被恶意使用。显然,路由首先发生。我没有文档来支持它,但基于行为,情况似乎是这样。