2017-05-23 11 views
0

私はC#とHttpResponseMessageでサーバー検証をコーディングしています。特定のメッセージでクライアントに応答を返す必要があり、送信されたデータが有効ではありません。このリストから選択する必要がある応答コードはどれですか?サーバー検証 - 応答メッセージ?

https://msdn.microsoft.com/en-us/library/system.net.httpstatuscode(v=vs.110).aspx

私は、無効なデータを持っている分野を知っているように、私はまた、メッセージをカスタマイズできますか?

注:MVC 4、Visual Studioの2010

ここでは、私のポスト機能である:

// POST api/Default1 
    [HttpPost] 
    public HttpResponseMessage PostUserProfile(HttpRequestMessage req) 
    { 
     UserProfile up = new UserProfile(); 
     string jsonContent = req.Content.ReadAsStringAsync().Result; 

     if (ModelState.IsValid) 
     { 
      up = JsonConvert.DeserializeObject<UserProfile>(jsonContent); 
      if (up.userName.Length <= 50 && 
       up.email.Length <= 60) 
      { 

       db.UserProfiles.Add(up); 
       db.SaveChanges(); 

       HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, up); 
       response.Headers.Location = new Uri(Url.Link("DefaultApi", new { id = up.UserId })); 
       return response; 
      } 
      else 
      { 
       // finish the server validation 
       HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.InternalServerError, up); 
       response.Headers.Location = new Uri(Url.Link("DefaultApi", new { id = up.UserId })); 
       return response; 
      } 
     } 
     else 
     { 
      return Request.CreateResponse(HttpStatusCode.BadRequest); 
     } 
    } 
+1

400(Bad Request)が1つです。 ModelBindingをまったく使用していないので、 'ModelState.IsValid'は常にtrueであることに注意してください。また、本当に[MVCのビルトインモデルバインド機能を使用する](https://stackoverflow.com/questions/18373202/asp-net-mvc-4-json-binding-to-the-view-model-nested) -object-error)です。 –

+1

'req.CreateResponse(...)'はあなたの問題を解決するはずです。無効なフィールドを含むJSONや、間違っていることや解決方法などの説明を含め、好きなコンテンツで対応できます。この目的のために、 'string ErrorMessage'のようなプロパティを保持する新しいクラスを作成し、パラメータとして' .CreateResponse(...) 'を渡すことをお勧めします。 –

+0

オピニオンのみ、コード400を返します - 間違ったリクエスト – Sparky

答えて

0

一部の人がHTTPメッセージ400であるBadRequestを提案した:HTTPステータスと等価

BadRequestは、要求がサーバーによって理解できないことを示します。 BadRequestは、他のエラーが該当しない場合、または正確なエラーが不明である場合、または独自のエラーコードがない場合に送信されます。

ブラウザにエラーとして表示されないので、私はOKメッセージをクライアントに送り返したように見えません。

私はNOTFOUNDがより適切だと思う:

HTTPステータスと等価

404 NOTFOUNDは、要求されたリソースがサーバー上に存在していないことを示しています。

ブラウザでエラーが発生したため、jQuery AJAXオブジェクトのエラーハンドラに送信されました。したがって、適切に処理することができます。つまり、htmlのメッセージボックスを更新して、サーバ/データベースにそのリソースやテーブルの行が含まれていないことをユーザーに知らせることができます。

関連する問題