1

参照型に[必須]を指定し、一致するJSON属性のないJSONを指定すると、エラーがスローされます。値型に[必須]を適用することが可能

null値型の使用やクラス内の値型のラッピングとは別に、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

はい、そうです。しかし、Field1が明示的に提供されていない場合、ModelStateを無効にしてリクエストを拒否したい – Hoppe

+0

* null可能な値の型を使用する以外に* - なぜこのアプローチを割り引いたのですか? –

答えて

1

あなたが範囲を知っている場合は、あなたが範囲属性を使用することができます。

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

私はもっと頑丈なものを探しています。私は、明示的に属性を提供する要求を強制したい – Hoppe

関連する問題