越来越routetemplate值我有一个名为的每个请求我的API中间件。我想记录路线模板以及来自这个中间件的请求的持续时间。如何在我的中间件代码中获得路由模板?路线模板类似于“/ products/{productId}”。ASP.Net核心 - 从中间件
0
A
回答
2
这并不容易,因为它是由MVC中间件通常恰好是在ASP.NET核心管线要执行的最后中间件创建从自定义中间件获得路由数据。
如果你想登录为下方的中间件的请求和响应,
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回答来实现获取路线miidleware here
其它可供选择的方法是使用为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. ASP.NET核心OWIN中间件
- 2. ASP.NET核心 - MVC上的中间件
- 3. asp.net核心中间件vs过滤器
- 4. 从asp.net核心有效发送文件
- 5. asp.net核心1.0 mvc。从Request.Body
- 6. 与ASP.Net核心
- 7. asp.net核心认证
- 8. 在Asp.net核心
- 9. 在Asp.net核心
- 10. ASP.NET核心删除DNX核心5.0
- 11. ASP.Net核心maxUrlLength
- 12. asp.net核心defaultProxy
- 13. 在asp.net核心
- 14. Structuremap和ASP.NET核心
- 15. 是什么创建项目ASP.NET核心(核心.NET)和ASP.NET核心(.NET Framework)的
- 16. Asp.NET核心OpenIddict invalid_grant
- 17. Map和MapWhen在asp.net核心中间件中的区别?
- 18. ASP.Net核心:C#中的URL重写中间件#
- 19. ASP.NET核心 - JwtBearer 2.0.0
- 20. ELMAH for asp.net核心
- 21. ASP.NET核心URL重写
- 22. ASP.NET核心 - Git中的Bower文件
- 23. ASP.NET核心权限
- 24. ASP.Net核心MVC日期时间参数
- 25. 我听不太懂一个GZipStream ASP.Net核心中间件
- 26. 中间件过滤asp.net核心REST方法
- 27. ASP.NET核心Facebook身份验证中间件用户图片
- 28. asp.net核心检查中间件的路由属性
- 29. 使用ASP.Net核心中间件启动后台任务
- 30. 多重身份验证中间件ASP.NET核心
你的代码示例记录了实际的请求url。我想记录路线模板。而不是/ products/product123我想记录/ products/{productId}。不过,我可以使用动作过滤器来获得此功能。感谢那些信息。 – sathya