Web サービスへのメッセージの一部を前処理するために RequestFilter を使用しています。エラーが発生した場合は、ResponseDTO を返し、リクエストのさらなる処理を強制終了します。どうすればその機能を実現できますか?
また、RequestDTO クラスの [RequestFilter] デコレーターを使用してこれを実装しています。複数の要求フィルターが必要な場合、特定の RequestDTO に使用するフィルターを選択するにはどうすればよいですか?
Web サービスへのメッセージの一部を前処理するために RequestFilter を使用しています。エラーが発生した場合は、ResponseDTO を返し、リクエストのさらなる処理を強制終了します。どうすればその機能を実現できますか?
また、RequestDTO クラスの [RequestFilter] デコレーターを使用してこれを実装しています。複数の要求フィルターが必要な場合、特定の RequestDTO に使用するフィルターを選択するにはどうすればよいですか?
エラーが発生した場合は、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
}
上記の回答は、フィルターを選択する方法と失敗する方法を示していますが、成功した代替応答を返す方法は示していません。ServiceStack RequestFilter からサービスを検索する方法は、適切な ResponseDTO を作成する方法を示しています。ここで重要なのは、ResponseDTO を応答ストリームにシリアル化し、ストリームを閉じることです。ServiceStack はこれを、サービスやその他のフィルターを実行しないための合図として使用していると思います。