参照型に[必須]を指定し、一致する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>
いつも値はありませんか?そのクラスをインスタンス化すると、明示的に他の値に設定されていなければ、 'Field1'の値は0になります。 –
はい、そうです。しかし、Field1が明示的に提供されていない場合、ModelStateを無効にしてリクエストを拒否したい – Hoppe
* null可能な値の型を使用する以外に* - なぜこのアプローチを割り引いたのですか? –