0

ASP.NET Web Api コントローラーの例を次に示します。

    public Mea Get(Int32 id)
    {
        try
        {
            return Meas.GetById(id) ?? new Mea(-1, 0D, 0D);
        }
        catch (Exception)
        {
            return new Mea(-1, 0D, 0D);
        }
    }

GetById が null を返した場合、または例外をキャッチした場合に、別の応答コードを返せるようにしたいと考えています。私が見るすべての例では、応答コードを追加できる HttpResponseMessage を使用しています。私の質問は、上記の例のように、HttpResponseMessage を使用しない場合に応答コードを変更する方法です。

4

2 に答える 2

1

関数から返される別の応答コードが必要な場合は、HttpResponseMessage.

関数は常にステータス コード「200」を返します。素のオブジェクトを返しても、フレームワーク パイプラインはそれをHttpResponseMessageデフォルトのステータス コード付きに変換するHttpStatusCode.OKので、自分で行うことをお勧めします。

私がお勧めするのは、API 関数から裸のオブジェクト/値を返さないことです。常に値を でラップしてHttpResponseMessageから、関数から応答メッセージを返します。基本的に、 でラップすることによりHttpResponseMessage、クライアント側で適切なステータス コードを使用できます。戻るHttpResponseMessageことは常にベストプラクティスです。

したがって、このように関数を変更してください

public HttpResponseMessage Get(Int32 id)
{
    try
    {
     // on successful execution
      return this.Request.CreateResponse(HttpStatusCode.OK, Meas.GetById(id) ?? new Mea(-1, 0D, 0D));
    }
    catch (Exception)
    {
      return this.Request.CreateResponse(HttpStatusCode.InternalServerError, Mea(-1, 0D, 0D));
    }
}

エラーの場合は、スローすることもできますHttpResponseException

于 2013-10-31T08:49:04.030 に答える