1

ResponseFiltersにいる間、クライアントに戻るステータスコード(および説明)を取得する方法はありますか?

長い説明:応答フィルターを使用しているときに、応答ヘッダーを追加することを検討しています。問題は、APIでNotFound&BadRequestを設定すると、ステータスの説明でユーザーにメッセージが返されることです。

return HttpError.NotFound(string.Format("Not found with TicketCodeId {0}",
       request.TicketCodeId))

これは、あらゆる種類のandroidおよび.netクライアントでうまく機能します。しかし、一部のクライアント(私はあなたのiPhoneを見ています)はステータスの説明を取得しません。ステータスコードが400の範囲に設定されており、特別なメッセージが含まれていることをresponsefilterで確認し、ヘッダーを追加してステータスメッセージの説明をコピーするという考え方です。

問題は、ResponseFilterがIHttpResponseにアクセスでき、そのオブジェクトにはステータスコードへのセッターしかないことです(したがって、ヘッダーを追加する必要があるかどうかを判断する方法がありません)。

400ステータスコードがヘッダーに同じ説明を追加するように設定されているすべての場所を覚えておく(そしてすべてのサービス実装に戻る)必要がないように、この一般的な方法で解決したいと思います。これが単一の場所であるResponseFilterで行われると便利です。

ResponseFilterのドキュメント

4

1 に答える 1

1

ステータスの説明でメッセージをHttpErrorまたはHttpResult(どちらもIHttpResultタイプ)として使用するBadRequestとNotFoundのすべての応答を返すため、次のようにして目的の追加ヘッダーを作成できます。

// Add Filter: If result is of type IHttpResult then check if the statuscode 
// is 400 or higher and the statusdescription is set.
this.ResponseFilters.Add((req, res, dto) =>
{
    if (dto == null) return;

    var httpResult = dto as IHttpResult;
    if (dto is IHttpResult)
    {
        // If statuscode is 400 then add a Header with the error message; 
        // this since not all clients can read the statusdescription
        if ((int)httpResult.StatusCode >= 400)
            AddPmErrorMessageHeader(res, httpResult.StatusDescription);
    }
});

AddPmErrorMessageHeaderメソッドは、いくつかの追加の検証を行い、resオブジェクトを使用してヘッダーを追加します。

res.AddHeader("PmErrorMessage", statusDescription);

res.OriginalResponseを使用してテストを行いましたが、4 **ステータスコードを設定する直前であっても、どういうわけか常にStatusCodeが200に設定されています。

于 2012-08-07T21:24:01.660 に答える