我们正在为.Net Core api使用一些自定义模型绑定器,并且在模型绑定器中有一些逻辑,有时会导致我们的api返回403
。
我知道当模型绑定失败时,您可以使用Mvc.ModelBinding.ModelBindingResult.Failed()
返回400
,但是如果由于尝试Unauthorized
访问而导致失败,那么我们需要返回403
,理想情况下是自定义消息。
答案 0 :(得分:0)
你能不能只返回状态代码?你可以在那里附上自己的信息。
return StatusCode(403);
答案 1 :(得分:0)
最终,我们决定使用ModelBindingResult.Failed()
和一条自定义错误消息,指出失败是由授权失败造成的。
答案 2 :(得分:0)
可以在您的bindingContext.ModelState.AddModelError("Unauthorized", "Reason")
实现中调用ModelBinder
。
然后,在控制器内部,您可以使用if(ModelState.IsValid)
来断言ModelBinder是否正确工作, ,如果过程中有任何验证错误。
在您这种情况下,您可以照常检查无效是否有效,并像往常一样在控制器中处理未经授权的响应。
与开发人员期望的预期行为相反,我将ModelBindingResult.Failed()
保留给模型绑定中非预期的错误(例如,由格式错误的请求引起的错误)。