从自定义模型绑定器返回403

时间:2017-05-30 15:58:13

标签: c# .net-core api-design

我们正在为.Net Core api使用一些自定义模型绑定器,并且在模型绑定器中有一些逻辑,有时会导致我们的api返回403

我知道当模型绑定失败时,您可以使用Mvc.ModelBinding.ModelBindingResult.Failed()返回400,但是如果由于尝试Unauthorized访问而导致失败,那么我们需要返回403,理想情况下是自定义消息。

3 个答案:

答案 0 :(得分:0)

你能不能只返回状态代码?你可以在那里附上自己的信息。

return StatusCode(403);

答案 1 :(得分:0)

最终,我们决定使用ModelBindingResult.Failed()和一条自定义错误消息,指出失败是由授权失败造成的。

答案 2 :(得分:0)

可以在您的bindingContext.ModelState.AddModelError("Unauthorized", "Reason")实现中调用ModelBinder

然后,在控制器内部,您可以使用if(ModelState.IsValid)来断言ModelBinder是否正确工作, ,如果过程中有任何验证错误。

在您这种情况下,您可以照常检查无效是否有效,并像往常一样在控制器中处理未经授权的响应。

与开发人员期望的预期行为相反,我将ModelBindingResult.Failed()保留给模型绑定中非预期的错误(例如,由格式错误的请求引起的错误)。