这是关于WEBAPI
和。{
以下是我的Model类。
public class Request
{
public int Id { get; set; }
public string Name { get; set; }
[Required]
public Gender Gender { get; set; }
}
我的控制器功能(POST)
public class Values1Controller : ApiController
{
public IHttpActionResult Post([FromBody] Models.Request request)
{
if (!ModelState.IsValid)
{
return BadRequest();
}
var gender = request.Gender;
var id = request.Id;
var name = request.Name;
// do some operations!
return Ok();
}
}
我提交的xml以及每个请求。
<Request xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://schemas.datacontract.org/2004/07/webapi1.Models">
<id>1</id>
<name>testName</name>
</Request>
在上面的XML帖子数据中,我根本没有提供Gender
的值,标记为[required]
。
但是ModelState.IsValid
返回true,即使在上面的XML中没有值也是如此
为Gender
提供。
如何防止WebAPI将默认值分配给模型中的枚举?
任何想法为什么?
答案 0 :(得分:2)
如果您不提供性别,我不知道您的模型为何有效,但您可以通过将Gender值定义为可为空而使此值不具有默认值,如下所示:
public class Request
{
public int id { get; set; }
public string Name { get; set; }
[Required]
public Gender? Gender { get; set; }
}
或者,您可以为性别指定默认值,如下所示:
public enum Gender
{
Unknown = 0,
Male,
Female
}
<强>更新强> 如果我以xml提交原始请求,我现在可以再次使用Postman看到我们的结果之间的差异:
标题:Content-Type text / xml
<Request xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://schemas.datacontract.org/2004/07/webapi1.Models">
<id>1</id>
<Name>testName</Name>
</Request>
我的模型有效,但是如果我提交x-www-form-urlencoded数据:
标题:内容类型应用程序/ x-www-form-urlencoded
id=1,Name=testname
然后我的模型无效,即使值类型有值,我的模型状态告诉我,Gender属性是必需的。
由于x-www-form-urlencoded是查询字符串的一部分,我猜MVC能够确定该值丢失,但是当数据以普通xml的形式提交时,它无法确定。
我建议如果您希望所有属性在所有情况下都可以使用,那么您可以按如下方式使值类型为空:
[Required]
public Gender? Gender { get; set; }
答案 1 :(得分:0)
您只需将Required
验证,但您没有检查这样的值:
[RegularExpression("^[0-9]*$", ErrorMessage = "Your fill the wrong content!")]
如果您想在保存之前设置默认值,您可以在班级中执行以下操作:
public Request()
{
Gender = "male";
Name = "default name"
}
希望能帮到你!