为 Web 中的空值验证表单数据 api
Validating Form Data For null values in web api
我class喜欢
public class MyClass
{
public object Jobj{get; set;}
public string summary{get; set;}
public string someMethod()
{
//Do some work
return "";
}
}
和一个 post 动作创建此 class 的实例并使用表单数据输入初始化属性
[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;
}
}
我想知道如何强制执行 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 "";
}
}
和一个 post 动作创建此 class 的实例并使用表单数据输入初始化属性
[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
始终为真,因为它包含计数 = 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
(这个 link 适用于 .NET 5,但基本上相同的事情和想法也适用于旧 MVC/WebApi)
或者,如果您仍想使用您的代码,您可以使用 Validator
class 简单地触发默认验证:
https://docs.microsoft.com/en-us/dotnet/api/system.componentmodel.dataannotations.validator?view=net-5.0
如果对象根据您定义的属性无效,则抛出异常。
我class喜欢
public class MyClass
{
public object Jobj{get; set;}
public string summary{get; set;}
public string someMethod()
{
//Do some work
return "";
}
}
和一个 post 动作创建此 class 的实例并使用表单数据输入初始化属性
[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;
}
}
我想知道如何强制执行 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 "";
}
}
和一个 post 动作创建此 class 的实例并使用表单数据输入初始化属性
[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
始终为真,因为它包含计数 = 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
(这个 link 适用于 .NET 5,但基本上相同的事情和想法也适用于旧 MVC/WebApi)
或者,如果您仍想使用您的代码,您可以使用 Validator
class 简单地触发默认验证:
https://docs.microsoft.com/en-us/dotnet/api/system.componentmodel.dataannotations.validator?view=net-5.0
如果对象根据您定义的属性无效,则抛出异常。