如何在ASP.NET Core 3.0中使用ValidationAttribute验证多个操作参数

埃米尔

考虑以下控制器动作签名:

[HttpGet]
public IEnumerable<Whatever> Get(DateTime from, DateTime to)

要么

[HttpGet]
public Whatever Get(int amount, SomeUnit unit)

我希望能够对调用方提供的参数进行验证。在这两种情况下,第一个参数中有效输入的传递取决于第二个参数的值。

到目前为止,我未能找到有关如何使用ASP.NET Core 3.0中的验证属性来实现此目的的解释或示例。

我看到例如CustomValidationAttribute允许在方法上使用它。我可以给它一个IsValid将委托给它的方法,并提供对象和验证上下文:

IsValid(Object, ValidationContext)

我检查了IsValid和ValidationContext的文档,但找不到关于如何访问传递给已验证操作的参数的任何提示。

在搜寻提示时,我从“ Pro ASP.NET Web API ”中摘录了ASP.NET中的HTTP Web服务,其中实现了类似的内容。但是摘录在显示代码之前就结束了,而我没有那本书(在ASP.NET Core上找不到对应的书)。

svstnv

CustomValidationAttribute用于属性和参数。为了进行动作验证,您应该编写自己的过滤器。这是一个例子:

public class MyValidationAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext context)
    {
        if(context.ModelState.IsValid)
        {
            var dateFrom = (DateTime)context.ActionArguments["from"];
            var dateTo = (DateTime)context.ActionArguments["to"];

            if(dateFrom <= dateTo)
            {
                // continue the flow in pipeline
                return;
            }
        }

        context.Result = new BadRequestResult();
    }
}

然后可以在控制器中使用它:

[HttpGet]
[MyValidation]
public IEnumerable<Whatever> Get(DateTime from, DateTime to)
{
    // Here ModelState.IsValid is true
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在 ASP.Net Core 3 中使用 UseNodeModules?

如何在3.x中取回ASP.NET Core详细请求记录

如何在ASP.NET Core 3中解析本地文件路径?

如何在ASP.NET Core 3中设置JSON序列化程序设置?

如何在asp.net core 3中添加全局路由前缀?

如何在asp.net Core 3中更改默认端口

如何在.NET Core 3中使用LINQ语法查询多个表

如何在ASP.Net Core中验证上传的文件

如何在ASP.NET Core 3上同时使用Azure AD身份验证和身份?

如何在ASP.NET Core中使用Bootstrap 4

如何在ASP.NET Core应用中使用HttpClient

如何在ASP.NET Core中使用jquery

如何在ASP.NET Core中使用SqlClient?

如何在ASP.NET Core中使用区域

如何在ASP.NET Core中使用npm

如何在 Asp.Net Core 中使用 Ninject?

如何在 ASP.NET Core 中使用 API?

如何在 ASP.NET Core 中使用异步“ForEach”?

.NET Core反射-如何在ASP.NET Core 3剃刀视图中查找属性的引用?

如何在.Net Core 3中引用托管服务?

如何在ASP.NET Core 3中从具有全文本索引的数据库中检索产品

如何在Asp.Net Core 3中访问System.Drawing,即System.Drawing.Common

Asp.net Core 2-如何在Asp.net Core 2.0中使用ServiceLocator

如何在ASP.NET Core中处理多值Cookie?

如何在ASP.NET Core中防范XSS?

如何在ASP.Net Core中创建“ RoleManager <IdentityRole>”?

如何在ASP.NET Core的ActionFilter中刷新响应?

如何在ASP Net Core中的服务之间共享WebSocket

如何在ASP.NET Core中实施小写路由?