c# - 如何避免在每次回发时调用 ModelState.IsValid?

标签 c# asp.net-core-mvc

我几乎总是想在回发时检查 ModelSate.IsValid 是否被调用。而且必须在每次回发开始时进行检查违反了 DRY 原则,有没有办法让它自动检查?

例子:

[HttpPost("RegisterUser")]
[AllowAnonymous]
public async Task<IActionResult> RegisterUser([FromBody] UserRegisterViewModel vmodel)
{
    if(!ModelState.IsValid)          // This code is repeated at every postback
        return ModelInvalidAction(); // Is there a way to avoid having to write it down?

    // do other things

    return StatusCode(201);
}

最佳答案

框架提供了一个抽象的ActionFilterAttribute,您可以将其子类化。

您可以使用操作过滤器来自动验证模型状态并在状态无效时返回任何错误:

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;

public class ValidateModelAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext context)
    {
        if (!context.ModelState.IsValid)
        {
            context.Result = new BadRequestObjectResult(context.ModelState);
        }
    }
}

然后您可以将它用于单个操作或全局注册

引用 Asp.Net Core : Action Filters

关于c# - 如何避免在每次回发时调用 ModelState.IsValid?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48832195/

相关文章:

c# - 无法使用 .NET 标准库通过 TLS 连接到 IBM MQ

c# - 如何确定项目/解决方案中哪些代码最常被使用?

c# - 在没有 CancellationToken 的情况下停止任务

asp.net-core - 如何使用 Autofac 和 ASP.NET Core 在 Controller 上启用属性注入(inject)?

azure - 将 Azure 包与 .NET Core/MVC 结合使用

c# - '无法从程序集加载类型 'Microsoft.AspNetCore.Mvc.MvcJsonOptions' 'Microsoft.AspNetCore.Mvc.Formatters.Json,版本=3.0.0.0

asp.net-core - uri 查询参数中的 asp.net core JWT?

c# - List<T>.AddRange 导致了短暂的延迟

c# - 安装/删除 2013 测试版后损坏的 Excel Interop COM 程序集

javascript - 具有.net核心模型的AngularJS未绑定(bind)