サービスにヒットするすべての http リクエストを傍受する方法はありますか?
例:
getのリクエストがhttp://host/Account/Create
1 か所でキャプチャされ、正しいサービスにリダイレクトされます。
http://host/Account/Delete/1
単一の場所でキャプチャされ、正しいサービスにリダイレクトされるリクエスト。
これを行う簡単な方法はありますか?
サービスにヒットするすべての http リクエストを傍受する方法はありますか?
例:
getのリクエストがhttp://host/Account/Create
1 か所でキャプチャされ、正しいサービスにリダイレクトされます。
http://host/Account/Delete/1
単一の場所でキャプチャされ、正しいサービスにリダイレクトされるリクエスト。
これを行う簡単な方法はありますか?
フィルターがどのように機能するかについて具体的な詳細が必要な場合は、ServiceStackの操作の順序を確認できます。
PreRequestFilter
のようなものを介してすべてのリクエストをフィルタリングしたい場合は、おそらくAが必要ですRequest.PathInfo
。
PreRequestFilter
すべてのリクエストに対して起動しますが、DTO はまだ逆シリアル化されていません。ServiceStack 独自のRequestLogsFeature.csの使用例を参照してください。
私のシナリオでは、最初にタイプRequestFilters
に基づいて決定を下し、必要requestDto.GetType()
に応じてフォールバックできるように使用しhttpReq.PathInfo
ます。ただし、これは REST リクエストに対してのみ発生します。
AppHost クラスで次のようなことを行います。
this.RequestFilters.Add((httpReq, httpResp, requestDto) =>
{
if (AppConfig.RequireSsl)
new RequireSslAttribute().Execute(httpReq, httpResp, requestDto);
// Force authentication if the request is not explicitly made public
if (!AppConfig.IsPublic(httpReq, requestDto.GetType()))
new AuthenticateAttribute().Execute(httpReq, httpResp, requestDto);
});