6

アプリケーションから適切なHttpコードと応答を返そうとしていますが、苦労しています。特定のhttp応答を返す方法は2つあるようです。

私がそれに対処したい方法は、HttpResponseException:を投げることです。

public Information Get(int apiKey)
{
    if (!_users.Authenticate(apiKey))
    {
        var response = new HttpResponseMessage();
        response.StatusCode = (HttpStatusCode)401;
        response.ReasonPhrase = "ApiKey invalid";

        throw new HttpResponseException(response);
    }

    return _info.Get();
}

ただし、これを行うと、表示される応答は空の200応答にすぎません。

HttpResponseMessageまた、アクションメソッドのシグネチャを変更して、次のように返すこともできるようです。

public HttpResponseMessage Get()
{
    if (!_users.Authenticate(apiKey))
    {
        return Request.CreateResponse((HttpStatusCode) 401, "ApiKey invalid");
    }

    return Request.CreateResponse((HttpStatusCode) 200, _info.Get());
}

私はそれを助けることができれば本当にこれをしたくありません、私はそれを毎回.でラップするのではなく、取得しようとしているオブジェクトとしてリターンタイプを持っている方がはるかに好きですHttpResponseMessage

最初のメソッドが、メッセージとともに401ではなく空の200を返す理由はありますか?

4

2 に答える 2

5

2つの可能な解決策。

最初に。IISがエラーを通過させるように構成されていることを確認してください

<configuration>
  <system.webServer>
    <httpErrors existingResponse="PassThrough" />
  </system.webServer>
</configuration>

2番目。完全にはわかりませんが、ASP.NET Web APIでは、例外を結果タイプに適切に変換するためのカスタムActionFilterの開発が必要になる場合があります。これは、私が個人的にWebAPIでエラー処理を行う方法です。

  1. 他の.NETアプリケーションで行うのと同じように、WebAPIで任意のタイプの例外をスローできるようにします。
  2. 例外をキャッチして適切な形式に変換するカスタムActionFilterを記述します。たとえば、すべての例外をカスタムJSON形式でシリアル化します。クライアント側では、この形式に基づいてエラー(検証例外など)を処理できるカスタムAJAXトリックがいくつかあります。
于 2012-09-04T10:47:30.353 に答える
1

HttpConfigurationのIncludeErrorDetailPolicy設定を確認してください。デフォルトでは、ポリシーは、ローカルでWebAPIにアクセスしているときにエラーの詳細を表示することです。

于 2012-09-04T19:03:35.910 に答える