C# 在web api中验证表单数据是否为空值
我有一节课C# 在web api中验证表单数据是否为空值,c#,asp.net-web-api,data-annotations,form-data,system.componentmodel,C#,Asp.net Web Api,Data Annotations,Form Data,System.componentmodel,我有一节课 public class MyClass { public object Jobj{get; set;} public string summary{get; set;} public string someMethod() { //Do some work return ""; } } 以及一个操作后创建该类的实例,并使用表单数据输入初始化属性 [HttpPost] public dynamic cont
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;
}
}
[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;
}
}
我想知道如何对表单数据输入强制执行null属性检查
我尝试的是:
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"]
};
return instance.SomeMethod();
}
catch (Exception ex)
{
return ex;
}
}
[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
始终为true,因为它包含count=0,为了使用ModelState.IsValid
,如果简单地说,您应该使用对象作为方法的参数
public dynamic controllerAction(MyClass x)
ModelState.IsValid
,简单地说,也是由ModelBinder
(基本上是一个“序列化”动作参数的东西)填充的,而不仅仅是由JObject.parse
或类似的东西填充的
然后,如果您不能使用默认的ModelBinder
,您可以编写自己的-
(此链接适用于.NET5,但基本上相同的东西和想法也适用于旧的MVC/WebApi)
或者,如果仍要使用代码,则可以使用验证程序
类触发默认验证:
根据您定义的属性,如果对象无效,它将引发异常。看起来像是模型绑定错误。您的操作方法必须采用类似于MyClass的controllerAction(MyClass MyClass)来检查您的模型状态,以确定它是否来自视图部件。您还可以共享视图部件代码?它没有视图部件代码。我们使用FormData来避免json数据中的脚本种类标记,所以我不能像controllerAction(MyClass MyClass)那样接受它