Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Asp.Net Web API属性时,以404响应_C#_Asp.net_Authorization_Asp.net Web Api - Fatal编程技术网

C# 使用Asp.Net Web API属性时,以404响应

C# 使用Asp.Net Web API属性时,以404响应,c#,asp.net,authorization,asp.net-web-api,C#,Asp.net,Authorization,Asp.net Web Api,当匿名用户试图访问仅对已识别用户有意义的资源(/preferences)时,我想返回HTTP状态404(NotFound) 在我的控制器/方法上使用as[Authorize]属性会自动为匿名用户返回401(未经授权),但在方法中处理授权听起来不太好。有什么想法吗 编辑:我正在使用Asp.NETWebAPI2和Authorize属性来保护资源 流浪者的相关资源我为什么要返回404: 使您的web api方法返回HttpResponseMessage,并将其配置为返回404。我相信你可以很容易

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

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

编辑:我正在使用Asp.NETWebAPI2和Authorize属性来保护资源

流浪者的相关资源我为什么要返回404:


使您的web api方法返回HttpResponseMessage,并将其配置为返回404。我相信你可以很容易地把它转换成c:


我认为这里的问题是,401“技术上”是在端点需要授权用户且进行呼叫的用户是匿名的情况下返回的正确代码。毕竟,匿名用户没有被授权。怎么可能呢?您不能授权匿名用户

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


如果我听起来像是在责骂,我道歉,这不是我的本意。:-)

谢谢你的回答,但是。。。也许我并没有说清楚,但这正是我想要避免的:测试用户是否被授权,然后返回自定义响应。理想情况下,我会“配置”授权服务器,以便在未授权时返回自定义代码。(这有意义吗?)是的,我明白了。本文演示了一个自定义授权过滤器。它将响应设置为401,但是您可以轻松地将其设置为任何您想要的:是的,但是如果您希望隐藏这样的路由甚至存在,那么可以按照RFC 7231的指定返回404。
return Me.Request.CreateResponse(HttpStatusCode.NotFound, "Your message here.")