越来越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 2.0的核心中间件认证
- 3. ASP.NET核心 - MVC上的中间件
- 4. asp.net核心中间件vs过滤器
- 5. asp.net核心排除从构建文件
- 6. 从asp.net核心有效发送文件
- 7. 与ASP.Net核心
- 8. asp.net核心1.0 mvc。从Request.Body
- 9. ASP.NET核心0x80004005
- 10. asp.net核心认证
- 11. 在Asp.net核心
- 12. 在Asp.net核心
- 13. ASP.Net核心maxUrlLength
- 14. ASP.NET核心删除DNX核心5.0
- 15. 在asp.net核心
- 16. asp.net核心defaultProxy
- 17. Structuremap和ASP.NET核心
- 18. 迁移从asp.net到asp.net核心
- 19. Asp.NET核心OpenIddict invalid_grant
- 20. 是什么创建项目ASP.NET核心(核心.NET)和ASP.NET核心(.NET Framework)的
- 21. ASP.Net核心:C#中的URL重写中间件#
- 22. Map和MapWhen在asp.net核心中间件中的区别?
- 23. Asp.Net核心(完整.Net框架)与Asp.Net核心(.Net核心)性能
- 24. ASP.NET核心和CreateErrorResponse
- 25. ASP.NET核心 - JwtBearer 2.0.0
- 26. ELMAH for asp.net核心
- 27. ASP.NET核心URL重写
- 28. ASP.NET核心权限
- 29. ASP.NET核心 - Git中的Bower文件
- 30. Asp.Net核心长时间运行任务
你的代码示例记录了实际的请求url。我想记录路线模板。而不是/ products/product123我想记录/ products/{productId}。不过,我可以使用动作过滤器来获得此功能。感谢那些信息。 – sathya