如果將[必需的]放在引用類型上,並提供沒有匹配的JSON屬性的JSON,則會引發錯誤。可能在值類型上強制執行[必需]
除了使用可爲空的值類型或在類中包裝值類型之外,在將請求反序列化爲Web API時,是否可以對值類型實施[必需]?
由於強制爲默認值0,所以在下面的Test1上不需要強制執行。即,如果您的JSON不包含Field1屬性,則序列化仍會成功完成。
我希望能夠將[必需的]放在我的值類型上,或者可能寫一個新屬性來完成此操作。
有沒有這樣的設置?或者,是否有可能利用XML和JSON的反序列化來實現這一目標?
public async Task<IHttpActionResult> Method1(Clas1 model){}
public class Class1
{
...
[Required]
public int Field1 { get; set; }
}
Although it may not be possible with attributes,理論上解串器可以在值脅迫的值類型之前檢查的屬性。如果是這樣,是否有事件或設置我可以做到這一點?
使用Json.net,我可以添加一個屬性[JsonProperty(Required = Required.AllowNull)]。有沒有類似的我可以做的XML反序列化?
即:
// POST api/Account/Register
[AllowAnonymous]
[Route("Register")]
public async Task<IHttpActionResult> Register(RegisterBindingModel model)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
var user = new ApplicationUser() { UserName = model.Email, Email = model.Email };
public class RegisterBindingModel //: IValidatableObject
{
[Required]
public string Email { get; set; }
public int Test1 { get; set; }
[Required]
public int Test3 { get; set; }
<RegisterBindingModel xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/WebApplication1.Models">
<Email>Sample string 2</Email>
<Test1>2</Test1>
</RegisterBindingModel>
它不會總是有價值嗎?當你實例化這個類時,如果Field1沒有明確地設置爲其他值,它的值就是0。 –
是的。但是我想使ModelState無效並且在Field1沒有明確提供的情況下拒絕請求 – Hoppe
*除了使用可爲空的值類型* - 爲什麼你打折這種方法? –