1. ホーム
  2. c#

[解決済み] なぜHttpResponseMessageではなく、IHttpActionResultを使用しなければならないのですか?

2022-03-16 20:08:18

質問

私は WebApi を使って開発してきましたが、WebApi2 に移行し、マイクロソフトが新たに導入した IHttpActionResult を返すよりも使うことを推奨しているようなインターフェイスです。 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();
    }
}

解決方法は?

を使用しないことを決定することができます。 IHttpActionResult というのも、既存のコードでは HttpResponseMessage のように、定型文のどれにも当てはまらないものです。 しかし HttpResponseMessage から IHttpActionResult の定型応答を用いて ResponseMessage . これを理解するのに時間がかかったので、必ずしもどちらかを選択する必要がないことを示すために投稿しました。

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 を継承しています。