当匿名用户尝试访问仅对已识别用户有意义的资源(/ preferences)时,我想返回HTTP状态404(NotFound) .
在我的Controller / Method上使用[Authorize]属性会自动为匿名用户返回401(未授权),但在方法内处理授权听起来不太好 . 有什么想法吗?
编辑:我使用Asp.Net Web API 2和Authorize属性来保护资源 .
人们徘徊的相关资源为什么我会返回404:
403 Forbidden vs 401 Unauthorized HTTP responses
http://www.bennadel.com/blog/2400-handling-forbidden-restful-requests-401-vs-403-vs-404.htm
使您的web api方法返回一个HttpResponseMessage,并将其配置为返回404.我确信您可以轻松地将其转换为c#:
return Me.Request.CreateResponse(HttpStatusCode.NotFound, "Your message here.")
我认为这里的问题是401在技术上是正确的代码,只要 endpoints 需要授权用户并且用户进行呼叫是匿名的 . 毕竟,匿名用户未获得授权 . 他们怎么可能?您无权授权匿名用户 .
所以标准代码提供的行为是正确的,你只是想做某些因某些原因而不同的事情 . 从长远来看,重新定义HTTP状态代码仅适用于您的应用程序可能是一个坏主意 . 例如,您的应用程序的客户端如何区分身份验证问题和资源识别问题?两者都没有找到 .
如果我听起来像是责骂,我道歉,这不是我的意图 . :-)
2 回答
使您的web api方法返回一个HttpResponseMessage,并将其配置为返回404.我确信您可以轻松地将其转换为c#:
我认为这里的问题是401在技术上是正确的代码,只要 endpoints 需要授权用户并且用户进行呼叫是匿名的 . 毕竟,匿名用户未获得授权 . 他们怎么可能?您无权授权匿名用户 .
所以标准代码提供的行为是正确的,你只是想做某些因某些原因而不同的事情 . 从长远来看,重新定义HTTP状态代码仅适用于您的应用程序可能是一个坏主意 . 例如,您的应用程序的客户端如何区分身份验证问题和资源识别问题?两者都没有找到 .
如果我听起来像是责骂,我道歉,这不是我的意图 . :-)