2017-12-01 8 views
0

を検証する私は、Web APIを持っていると私は入って来要求を検証したかったHttpRequestMessage体

現在、私は私のウェブAPIコントローラでこれを持っている:。

public HttpResponseMessage GetSomething([FromBody]SomeObject request) 
{ 
    var test= request.Number; 
    //omit 
} 

public class SomeObject 
{ 
    [JsonProperty] 
    public double Number {get;set;} 
} 

現在、私がリクエストで送信した場合と、 Numberを文字列または非ダブルに設定すると、リクエストがサーバーに送信されるとNumberはゼロに設定されます。私はそれが来るときにゼロにしたくないので、それが来るときにどのように要求を検証する必要がありますか?

+0

その場合には、クライアント400不正な要求のHTTPステータス応答を送信します:あなたは、クライアントのサイトにそのようなことになる間違った場合は、データがNumberに設定さ

。リクエストを受信しないと、クライアントがゴミを送信しようとするのを防ぐことができないので、それを検証することはできません。サーバ側の@Crowcoderの – Crowcoder

+0

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@?私は数値ゼロに対してチェックをしません –

+0

'Number'がヌル入力可能なint(?)なら、代わりにnullを返しますか? – Crowcoder

答えて

2

エラーを取得してユーザーに返すには、コントローラAPIのModelStateプロパティをチェックします。

public IHttpActionResult Post([FromBody]SomeObject value) 
{ 
    if(this.ModelState.IsValid) 
    { 
     // If you enter here all data are set correctly 
     return Ok(); 
    } 
    else 
    { 
     // here you use BadRequest method and pass the ModelState property. 
     return this.BadRequest(this.ModelState); 
    } 
} 

Numberプロパティを変更する必要はありません。私が行う唯一の変更は、IHttpActionResultを使用してアクションの戻り値の型を変更することです。

{ 
    "Message": "The request is invalid.", 
    "ModelState": { 
     "value.number": [ 
      "Error converting value \"dfsdf\" to type 'System.Double'. Path 'number', line 2, position 19." 
     ] 
    } 
} 
関連する問題