猿问

在 ASP.NET Core 2.1 中将 ValidateModelAttribute

以前在 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);

}


慕后森
浏览 300回答 1
1回答

慕沐林林

并不真地。返回 a 的问题ViewResult是您需要用它返回“模型”,以便正确绑定所有内容以重新填充表单字段并显示验证错误消息。该模型是您动作的一些参数,但它会因动作而异,并且可能与其他参数一起存在,这使得即使不是不可能也很难辨别哪个是应该返回的“模型”。简而言之,你很容易做这样的事情return View(model);如果不是不可能,则指示自动化过程在每种情况下都正确执行它是很困难的。在 API 中,您可以避开所有这些,因为您只是返回简单的 JSON,您可以使用它ModelState来获取返回带有验证错误列表的对象所需的所有信息。发布的“模型”完全无关紧要。此外,就其价值而言,在 ASP.NET Core 2.1 中,您甚至不需要为此自定义属性。您所要做的就是用[ApiController]. 然后,如果存在任何验证错误,ASP.NET Core 将自动返回一个BadRequestObjectResult(400) ModelState。
随时随地看视频慕课网APP
我要回答