私は 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
ように適応できます。これを理解するのにしばらく時間がかかりましたので、必ずしもどちらか一方を選択する必要がないことを示すために投稿したいと思います。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