当使用Asp.Net Web API AuthorizeAttribute时,使用404进行响应

本文关键字:使用 响应 AuthorizeAttribute Asp Net API Web | 更新日期: 2024-04-23 14:44:56

当匿名用户试图访问仅对已识别用户有意义的资源(/preferences)时,我希望返回HTTP状态404(NotFound)。

在我的控制器/方法上使用as[Authorize]属性会自动为匿名用户返回401(Unauthorized),但在方法内部处理授权听起来不太好。有什么想法吗?

编辑:我使用Asp.NetWebneneneba API 2和Authorize属性来保护资源。

相关资源为人们徘徊为什么我会返回一个404:

  • 403禁止与401未经授权的HTTP响应

  • http://www.bennadel.com/blog/2400-handling-forbidden-restful-requests-401-vs-403-vs-404.htm

当使用Asp.Net Web API AuthorizeAttribute时,使用404进行响应

让你的web api方法返回一个HttpResponseMessage,并将其配置为返回404。我相信你可以很容易地将其转换为c#:

return Me.Request.CreateResponse(HttpStatusCode.NotFound, "Your message here.")

我认为这里的问题是,无论何时端点需要授权用户,并且进行调用的用户是匿名的,401在"技术上"都是返回的正确代码。毕竟,匿名用户是没有授权的。他们怎么会这样?您无法授权匿名用户。

因此,标准代码提供的行为是正确的,您只是出于某种原因想要做一些不同的事情。从长远来看,重新定义应用程序的HTTP状态代码可能是个坏主意。例如,应用程序的客户端如何区分身份验证问题和资源标识问题?两者都将返回找不到。

如果我听起来像是在骂,我道歉,那不是我的本意