我使用 modelstate 属性来检查我的模型是否有效。这一切都很好,但是当我向我的 json 主体添加更多属性(我的模型中不存在)时,它说模型仍然有效。
如何检查发送到匹配 C# 模型的 json 正文?
这是我现在的模型:
public class User
{
public int Id { get; set; }
public string IdentityServerId { get; set; }
[Required(ErrorMessage = "Email is required")]
[EmailAddress(ErrorMessage = "Not a valid emailaddress")]
public string Email { get; set; }
[Required(ErrorMessage = "Name is required")]
public string Name { get; set; }
public bool IsActive { get; set; }
}
格式正确的 json 将是:
{
"Name": "Klaas",
"Email": "eifjelfij@sdf"
}
这给出了一个 200 OK 创建相应的用户。
但是,当我发送此 json 时:
{
"Name": "Arjan",
"Email": "eifjelfij@sdf",
"eifj":"eflijelfij"
}
它仍然会创建用户,但我很乐意为用户提供错误消息而不是用户创建。
您可以在应用程序启动期间更改 JSON.NET 设置以将不存在的属性处理为错误...
services.AddMvc()
.AddJsonOptions(options =>
{
options.SerializerSettings.MissingMemberHandling = MissingMemberHandling.Error;
});
这应该会导致User
控制器操作中的参数为null
,从而导致验证失败。
在你的 Action 中,你也可以专门处理它。
public async Task<IActionResult> Post([FromBody]Models.User user)
{
if(!ModelState.IsValid)
{
if(user==null)
{
// user is null, which means we couldn't deserialize it or
// no data was sent with the request
return BadRequest(new { Error = "Invalid formatted data." });
}
// return errors, since we know user is not null
return BadRequest(ModelState);
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句