【发布时间】:2015-09-21 05:22:43
【问题描述】:
我有一个 MVC webapi 站点,它使用 OAuth/token 身份验证来验证请求。所有相关控制器都具有正确的属性,并且身份验证工作正常。
问题在于,并非所有请求都可以在属性范围内获得授权 - 必须在控制器方法调用的代码中执行一些授权检查 - 返回 401 未授权响应的正确方法是什么?这种情况?
我已经尝试过throw new HttpException(401, "Unauthorized access");,但是当我这样做时,响应状态码是 500,我还得到了堆栈跟踪。即使在我们的日志记录 DelegatingHandler 中,我们也可以看到响应是 500,而不是 401。
【问题讨论】:
-
对于任何得到这个答案的人,我建议考虑适当的时间抛出
HttpResponseException,而不是何时返回Unauthorized()。对“预期”错误使用异常有点反模式,因此如果在某些情况下您希望调用会犯此错误,则返回Unauthorized()可能是正确的调用。保存HttpResponseException以备不时之需。 -
请参阅github.com/aspnet/Mvc/issues/5507 进行一些讨论。
-
@Rikki,401 不是“预期”错误。 -- 这是一种特殊情况,应该会导致您中止您的工作流程(除了日志记录,您应该已经为任何异常执行此操作...) -- 无论如何,如果您想从控制器返回强类型结果(例如,为了便于单元测试),异常显然是最好的方法。
标签: c# asp.net-mvc authorization