微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

验证表单数据对于 web api 中的空值

如何解决验证表单数据对于 web api 中的空值

我有这样的课

public class MyClass
{
  public object Jobj{get; set;}
  public string summary{get; set;}

 public string someMethod()
 {
  //Do some work
  return "";
 }
}

以及创建此类的实例并使用表单数据输入初始化属性的后期操作

        [HttpPost]
        public dynamic controllerAction()
        {
            try
            {
                var instance= new MyClass
                {
                    Jobj= JObject.Parse(HttpContext.Current.Request.Params["formInputKey1"]),summary= HttpContext.Current.Request.Params["summaryKey"]
                };
                return instance.someMethod();
            }
            catch (Exception ex)
            {
                return ex;
            }
        }

我想知道如何对表单数据输入强制执行空属性检查

我尝试了什么:

public class MyClass
{
  [required]
  public object Jobj{get; set;}
  [required(AllowEmptyStrings = false),StringLength(maximumLength: 100,MinimumLength = 1)]
  public string summary{get; set;}

 public string someMethod()
 {
  //Do some work
  return "";
 }
}

以及创建此类的实例并使用表单数据输入初始化属性的后期操作

        [HttpPost]
        public dynamic controllerAction()
        {
            try
            {
                var instance= new MyClass
                {
                    Jobj= JObject.Parse(HttpContext.Current.Request.Params["formInputKey1"]),summary= HttpContext.Current.Request.Params["summaryKey"]
                };
                var isModelStateValid = ModelState.IsValid;
                if(!isModelStateValid )
                {
                   throw ArgumentException("Found Data Null");
                }
                return instance.someMethod();
            }
            catch (Exception ex)
            {
                return ex;
            }
        }

但是 ModelState.IsValid 始终为真,因为它包含 count = 0

解决方法

为了使用ModelState.IsValid,简单地说,你应该使用对象作为方法的参数

public dynamic controllerAction(MyClass x)

ModelState.IsValid 再次,如果简单地说,由 ModelBinder 填充(基本上是“序列化”您的 Action 参数的东西),而不仅仅是由 JObject.parse 或类似的东西填充。

如果你不能使用默认的 ModelBinder 你可以自己写 - https://docs.microsoft.com/en-us/aspnet/core/mvc/advanced/custom-model-binding?view=aspnetcore-5.0 (此链接适用于 .NET 5,但基本上相同的东西和想法也适用于旧的 MVC/WebApi)

或者,如果您仍然想使用您的代码,您可以简单地使用 Validator 类触发默认验证: https://docs.microsoft.com/en-us/dotnet/api/system.componentmodel.dataannotations.validator?view=net-5.0

如果对象根据您定义的属性无效,则抛出异常。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。