确定在ASP.NET Core网站上回答的中间件

时间:2019-04-25 14:23:57

标签: c# asp.net-core

是否有办法(回溯)确定哪个中间件回答了请求? 在某个地方或类似地方有堆栈跟踪吗?

我想要的可能是直到最后一个中间件的堆栈跟踪,该中间件可以在httpcontext对象中访问。

我可以只设置标志来添加一些伪造的中间件,但是我希望有一些不需要添加代码的东西。

例如,可以区分静态文件和MVC所服务的请求(这是一个示例,但并不详尽,我有多个中间件服务于响应,并且我希望能够识别出哪个一个)。

1 个答案:

答案 0 :(得分:1)

ASP.NET Core Logging API已经提供了您所需要的。 您可以获得以下输出:

  

信息:Microsoft.AspNetCore.Hosting.Internal.WebHost [1]
    请求启动HTTP / 1.1 GET http://localhost:5000/api/todo/0

     

信息:Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker [1]         用参数(0)执行操作方法TodoApi.Controllers.TodoController.GetById(TodoApi)-ModelState有效

     

信息:Microsoft.AspNetCore.Hosting.Internal.WebHost [1]         请求启动HTTP / 1.1 GET https://localhost:44301/css/bootstrap.css

     

信息:Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware [2]         正在发送文件。请求路径:“ / css / bootstrap.css”。物理路径:XXX

最简单的方法是创建一个appsettings.Development.json文件,您可以在其中设置以下配置:

{
  "Logging": {
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    },
    "Console":
    {
      "IncludeScopes": true
    }
  }
}

默认情况下,您将能够在控制台中查看日志。您可以使用不同的ILoggerProvider来更改日志的显示位置。

我建议您阅读Logging chapter on MSDN