HttpResponseMessage の代わりに IHttpActionResult を使用する必要があるのはなぜですか? 質問する

HttpResponseMessage の代わりに IHttpActionResult を使用する必要があるのはなぜですか? 質問する

私は WebApi を使用して開発を行っており、WebApi2 に移行しました。WebApi2 では、IHttpActionResultを返すよりも使用することが推奨されていると思われる新しいインターフェイスがMicrosoft によって導入されました。この新しいインターフェイスの利点がよくわかりません。主に、を作成するための若干HttpResponseMessage簡単な方法を提供しているだけのようです。HttpResponseMessage

これは「抽象化のための抽象化」であると私は主張します。何か見落としているのでしょうか? コードを 1 行節約する以外に、この新しいインターフェイスを使用することで得られる実際の利点は何でしょうか?

従来の方法(WebApi):

public HttpResponseMessage Delete(int id)
{
    var status = _Repository.DeleteCustomer(id);
    if (status)
    {
        return new HttpResponseMessage(HttpStatusCode.OK);
    }
    else
    {
        throw new HttpResponseException(HttpStatusCode.NotFound);
    }
}

新しい方法(WebApi2):

public IHttpActionResult Delete(int id)
{
    var status = _Repository.DeleteCustomer(id);
    if (status)
    {
        //return new HttpResponseMessage(HttpStatusCode.OK);
        return Ok();
    }
    else
    {
        //throw new HttpResponseException(HttpStatusCode.NotFound);
        return NotFound();
    }
}

ベストアンサー1

IHttpActionResult既存のコードが、HttpResponseMessage定型応答の 1 つに適合しない を作成するため、 を使用しないことに決める場合があります。ただし、の定型応答を使用するHttpResponseMessageように適応できます。これを理解するのにしばらく時間がかかりましたので、必ずしもどちらか一方を選択する必要がないことを示すために投稿したいと思います。IHttpActionResultResponseMessage

public IHttpActionResult SomeAction()
{
   IHttpActionResult response;
   //we want a 303 with the ability to set location
   HttpResponseMessage responseMsg = new HttpResponseMessage(HttpStatusCode.RedirectMethod);
   responseMsg.Headers.Location = new Uri("http://customLocation.blah");
   response = ResponseMessage(responseMsg);
   return response;
}

コントローラーが継承する必要があるResponseMessage基本クラスのメソッドであることに注意してください。ApiController

おすすめ記事