1

Web サービスへのメッセージの一部を前処理するために RequestFilter を使用しています。エラーが発生した場合は、ResponseDTO を返し、リクエストのさらなる処理を強制終了します。どうすればその機能を実現できますか?

また、RequestDTO クラスの [RequestFilter] デコレーターを使用してこれを実装しています。複数の要求フィルターが必要な場合、特定の RequestDTO に使用するフィルターを選択するにはどうすればよいですか?

4

2 に答える 2

2

エラーが発生した場合は、ResponseDTO を返し、リクエストの処理を強制終了します。どうすればその機能を実現できますか? エラーをどのように判断するか正確にはわからないため、これはかなり基本的な解決策です。

public class RequestFilterAttribute : Attribute, IHasRequestFilter
{
    public void RequestFilter(IHttpRequest req, IHttpResponse res, object requestDto)
    {
        if(requestDto.GetType() == typeof(YourRequestType))
        {
            //code to check for errors - if error throw exception 
            throw new Exception("Exception for your request type");
        }
    }
}

複数の要求フィルターが必要な場合、特定の RequestDTO に使用するフィルターを選択するにはどうすればよいですか?

いくつかの異なる RequestFilter 実装を作成し、それぞれの DTO を異なる実装で装飾できます。

public class FilterOneAttribute : Attribute, IHasRequestFilter
{
    //Code
}

public class FilterTwoAttribute : Attribute, IHasRequestFilter
{
    //Code
}

[FilterOne]
public class OneClass 
{
    //Code
}

[FilterTwo]
public class TwoClass
{
    //Code
}
于 2013-02-28T18:19:59.177 に答える
1

上記の回答は、フィルターを選択する方法と失敗する方法を示していますが、成功した代替応答を返す方法は示していません。ServiceStack RequestFilter からサービスを検索する方法は、適切な ResponseDTO を作成する方法を示しています。ここで重要なのは、ResponseDTO を応答ストリームにシリアル化し、ストリームを閉じることです。ServiceStack はこれを、サービスやその他のフィルターを実行しないための合図として使用していると思います。

于 2013-03-10T15:57:19.590 に答える