模型状态即使未发送必填字段也始终为真
Model State Always true even when the required field is not sent
我只是调用 API 并将一个对象作为参数传递,一切正常。但后来我想在继续之前验证模型,所以我只是在我一直想要填写的字段上方写下 [Required] 。
型号
public class Consent
{
public Consent()
{
}
public int Id { get; set; }
[Required]
public int FacilityId { get; set; }
public string Heading { get; set; }
public string Description { get; set; }
}
并像这样在控制器中验证模型状态
public ActionResult<int> AddConsent(Consent consent)
{
if(!ModelState.IsValid){
throw new CustomException("000-0000-000", "Validation failed");
}
//Further Code
}
据此,当我调用 api 时不发送 facilityId 时,我预计模型状态为 false
JSON
{
"heading": "HeadingFromPostman5",
"description": "DiscriptiomFromPostman5"
}
但它仍然是真的。我知道 .Net 核心在 null 时将 0 分配给 int 值,但我该如何验证它呢?解决这个问题的方法是什么?
只需替换这一行:
[Required]
public int FacilityId { get; set; }
有了这个:
[Required]
public int? FacilityId { get; set; }
Required 属性适用于可为 null 的引用对象。对于原语,在创建实例时,默认值(在本例中为 0 表示 int)分配给 FacilityId,因此 Required 将不起作用。如果您将 FacilityId 设置为可为空的 int,则 Required 属性将正常工作。
[Required]
public int? FacilityId { get; set; }
我只是调用 API 并将一个对象作为参数传递,一切正常。但后来我想在继续之前验证模型,所以我只是在我一直想要填写的字段上方写下 [Required] 。 型号
public class Consent
{
public Consent()
{
}
public int Id { get; set; }
[Required]
public int FacilityId { get; set; }
public string Heading { get; set; }
public string Description { get; set; }
}
并像这样在控制器中验证模型状态
public ActionResult<int> AddConsent(Consent consent)
{
if(!ModelState.IsValid){
throw new CustomException("000-0000-000", "Validation failed");
}
//Further Code
}
据此,当我调用 api 时不发送 facilityId 时,我预计模型状态为 false JSON
{
"heading": "HeadingFromPostman5",
"description": "DiscriptiomFromPostman5"
}
但它仍然是真的。我知道 .Net 核心在 null 时将 0 分配给 int 值,但我该如何验证它呢?解决这个问题的方法是什么?
只需替换这一行:
[Required]
public int FacilityId { get; set; }
有了这个:
[Required]
public int? FacilityId { get; set; }
Required 属性适用于可为 null 的引用对象。对于原语,在创建实例时,默认值(在本例中为 0 表示 int)分配给 FacilityId,因此 Required 将不起作用。如果您将 FacilityId 设置为可为空的 int,则 Required 属性将正常工作。
[Required]
public int? FacilityId { get; set; }