以前在 WebAPI 项目中,我使用ValidateModelAttribute避免if (!ModelState.IsValid)在我的每个控制器中重复语句。public class ValidateModelAttribute : ActionFilterAttribute{ public override void OnActionExecuting(ActionExecutingContext context) { if (!context.ModelState.IsValid) { context.Result = new BadRequestObjectResult(context.ModelState); } }}当我尝试在 MVC 控制器 (ASP.NET Core 2.1) 中的操作上使用相同的属性时,我收到 400 状态代码,页面仅显示错误的 JSON 表示,例如{"Description":["Description is required"]}.是否有类似的属性可以在我的 MVC 控制器中使用,以与使用相同的方式将 ModelState 错误转发到我的视图if (!ModelState.IsValid){ return View(command);}
1 回答
慕沐林林
TA贡献2016条经验 获得超9个赞
并不真地。返回 a 的问题ViewResult
是您需要用它返回“模型”,以便正确绑定所有内容以重新填充表单字段并显示验证错误消息。该模型是您动作的一些参数,但它会因动作而异,并且可能与其他参数一起存在,这使得即使不是不可能也很难辨别哪个是应该返回的“模型”。简而言之,你很容易做这样的事情return View(model)
;如果不是不可能,则指示自动化过程在每种情况下都正确执行它是很困难的。
在 API 中,您可以避开所有这些,因为您只是返回简单的 JSON,您可以使用它ModelState
来获取返回带有验证错误列表的对象所需的所有信息。发布的“模型”完全无关紧要。
此外,就其价值而言,在 ASP.NET Core 2.1 中,您甚至不需要为此自定义属性。您所要做的就是用[ApiController]
. 然后,如果存在任何验证错误,ASP.NET Core 将自动返回一个BadRequestObjectResult
(400) ModelState
。
- 1 回答
- 0 关注
- 273 浏览
添加回答
举报
0/150
提交
取消