からroutetemplate値を取得コア - 。私は、このミドルウェアからの要求の期間とともに経路テンプレートを記録したいと思う。私のミドルウェアコードでルートテンプレートを取得するには?ルートテンプレートは "/ products/{productId}"のようなものです。ASP.Netは、私は私のAPIへの要求ごとに呼び出されたミドルウェアを持っているミドルウェア
0
A
答えて
2
それは一般的にASP.NETコア・パイプラインで実行される最後のミドルウェアであることを起こるMVCミドルウェアによって作成されるので、カスタムミドルウェアからのルートデータを取得することは容易ではありません。
あなたは以下のようにあなたのミドルウェアでのリクエストとレスポンスを記録したい場合は、ルートデータ中に本当に興味を持っている場合、
public async Task Invoke(HttpContext context)
{
var requestBodyStream = new MemoryStream();
var originalRequestBody = context.Request.Body;
await context.Request.Body.CopyToAsync(requestBodyStream);
requestBodyStream.Seek(0, SeekOrigin.Begin);
var url = UriHelper.GetDisplayUrl(context.Request);
var requestBodyText = new StreamReader(requestBodyStream).ReadToEnd();
_logger.Log(LogLevel.Information, 1, $"REQUEST METHOD: {context.Request.Method}, REQUEST BODY: {requestBodyText}, REQUEST URL: {url}", null, _defaultFormatter);
requestBodyStream.Seek(0, SeekOrigin.Begin);
context.Request.Body = requestBodyStream;
await next(context);
var bodyStream = context.Response.Body;
var responseBodyStream = new MemoryStream();
context.Response.Body = responseBodyStream;
await _next(context);
responseBodyStream.Seek(0, SeekOrigin.Begin);
var responseBody = new StreamReader(responseBodyStream).ReadToEnd();
_logger.Log(LogLevel.Information, 1, $"RESPONSE LOG: {responseBody}", null, _defaultFormatter);
responseBodyStream.Seek(0, SeekOrigin.Begin);
await responseBodyStream.CopyToAsync(bodyStream);
}
ただし、非常に素晴らしいがあるSO GETルートはhereをmiidleware実装するために答えます
他の代替的なアプローチは、要求/応答ロギング用Action Filtersを使用することです。ここで
0
は、私はそれが働いて得た方法です。私は、フィルタOnActionExecutingメソッド内のルートテンプレートを取得し、HttpContextに追加します。後でミドルウェア内部のHttpContextにアクセスできるので、ミドルウェア内のHttpContextからこれにアクセスします。
public class LogActionFilter : IActionFilter
{
public LogActionFilter()
{
}
public void OnActionExecuted(ActionExecutedContext context)
{
}
public void OnActionExecuting(ActionExecutingContext context)
{
context.HttpContext.Items.Add("RouteTemplate", context.ActionDescriptor.AttributeRouteInfo.Template);
}
}
関連する問題
- 1. 私はAPIへの呼び出し持っチャイ要求
- 2. すべての要求に対してOWINミドルウェアが呼び出されない
- 3. router.useミドルウェアが呼び出されない
- 4. Laravel 5.3コントローラー__constructはミドルウェアの前に呼び出されます
- 5. Laravel 5.4ミドルウェアは、私は、次のファイルを持ってガード
- 6. laravel停止可能ミドルウェア、私は要求ロギング用の終端可能ミドルウェアを使用したいコントローラ
- 7. Expressミドルウェアが呼び出されていない
- 8. Reduxミドルウェア:ミドルウェアへのパラメータとしてレスポンスヘッダを送信したい
- 9. 私はWEBAPIでモデルクラスの下に持って要求Ajax呼び出し
- 10. は、私は、カスタムログアウトビュー.Iを持つミドルウェア
- 11. Laravel別のミドルウェアが失敗した場合にミドルウェアを呼び出す
- 12. Express js:ミドルウェア機能が呼び出されていません
- 13. Laravelミドルウェアのhandle()メソッドは、他のミドルウェアで 'Clousre $ next'を使用して呼び出されますか?ここで
- 14. ルータのミドルウェア機能を呼び出す
- 15. ミドルウェア内のモデルを呼び出す
- 16. Reduxの非同期ミドルウェア・アクションは、API呼び出しのために手持ちの必要な状態を持っていない
- 17. 私は前の要求のために呼び出される関数が
- 18. 管理者は、私はこの管理ミドルウェア持っ
- 19. Webミドルウェアからapiミドルウェアへのセッションにlaravel 5.3でアクセスする
- 20. ミドルウェアを復元する - スタック内の次のミドルウェアを正しく呼び出す
- 21. $要求 - >要求がlaravelでnullである私はミドルウェアFederationMiddleware定義しようとしている5
- 22. expressjsは、複数のミドルウェアを書き、私のようなミドルウェアを保持スクリプト持っ
- 23. ミドルウェアとミドルウェアの配列の違いは?
- 24. Laravel SPA私はミドルウェアを指定し、私のコントローラの構築物に認証ミドルウェア
- 25. ASP.NETコアミドルウェアまたはOWINミドルウェア?
- 26. Webpack Karmaミドルウェア:要求されたオブジェクトが表示されていないソースファイル
- 27. Laravel 5 - ミドルウェアで$ request-> path()を呼び出すと、Laravelは要求URIの変更を無視しますか?
- 28. laravel 5.2ログインするたびにミドルウェアを呼び出す方法は?
- 29. 私は次のコードを使用して呼び出されたListViewウィジェット持っ
- 30. ノード-SASS-ミドルウェアは、私はノード-SASS-ミドルウェアがここに私のCSSのレンダリングされていない問題を抱えている急行
コード例では、実際のリクエストURLが記録されます。私はルートテンプレートを記録したかったのです。/products/product123の代わりに/ products/{productId}を記録したかったのです。しかし、私はこれをAction Filterを使って得ることができます。その情報をありがとう。 – sathya