2017-09-20 119 views
1

如果將[必需的]放在引用類型上,並提供沒有匹配的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> 
+0

它不會總是有價值嗎?當你實例化這個類時,如果Field1沒有明確地設置爲其他值,它的值就是0。 –

+0

是的。但是我想使ModelState無效並且在Field1沒有明確提供的情況下拒絕請求 – Hoppe

+0

*除了使用可爲空的值類型* - 爲什麼你打折這種方法? –

回答

1

如果你知道的範圍內,可以使用範圍屬性。

[Range(0, 99)] 
public int Field1{ get; set; } 
+0

我正在尋找更強大的東西。我想強制請求顯式提供屬性 – Hoppe

相關問題