2016-09-02 4 views
0

aspnetコアのRESTサービスでHTTPステータスコードをどのように活用できますか?最終的に何かが間違っていた場合でもメッセージを含めて。例えばRESTfulサービスがメッセージでHTTP応答を返します

[HttpGet] 
    public async Task<MyModel> Get(int id) 
    { 
     if (id == 0) 
      return new HttpResponseMessage(HttpStatusCode.BadRequest); 
     ... 
    } 

このコードは明らかに誤りCannot implicitly convert type 'System.Net.Http.HttpResponseMessage' to 'MyModel'

一つの解決策は、常にMyModelStatusのような、SuccessまたはMessageにHTTP200と余分な性質のカップルを返すようになります返しますが、これはRESTfulであるという目的を破ります。代わりTask<MyModel>を返す

答えて

1

OkまたはBadRequestの方法を使用できます。戻り値の型はTask<ObjectResult>です。

[HttpGet] 
public async Task<ObjectResult> Get(int id) 
{ 
    if(id==0) 
     return BadRequest(new {Messagae = "Something is not correctT"}); 
    var result = await GetSomeMyModelObject(); 

    return Ok(result); 
} 

あなたは単にあなたのデータを返すことができ、必ずしもOkメソッドを呼び出す必要はありません。シリアライザは、これも

[HttpGet] 
public async Task<IActionResult> Get(int id) 
{ 
    if(id==0) 
     return BadRequest(new {Messagae = "Something is not correctT"}); 
    var result = await GetSomeMyModelObject(); 

    return result; 
} 
2

は、Task<IActionResult>を返す:

[HttpGet] 
public async Task<IActionResult> Get(string id) 
{ 
    if (id == 0) return BadRequest(); 
    // ... 

    return Ok(model); 
} 

かかるようにBadRequest()Ok()NotFound()Created()、およびASコントローラヘルパーメソッドの数は、(documentationを参照)があります。これらは、期待していたHTTP応答コードにマップされます。

+3

@EdwinvanVlietを働いた正しいレスポンスヘッダを設定する(200のOKステータスを)世話をしますあなた:https://github.com/aspnet/Mvc/blob/dev/src/Microsoft.AspNetCore.Mvc.Core/ControllerBase.cs#L349 –

0

に動作します。これは私のために、 `OK(モデル)は`のために何をするかだ代わりに

return BadRequest("Something is not correct"); 
関連する問題