HttpActionContext唯一请求标识符

时间:2018-12-17 12:45:01

标签: c# asp.net-web-api

我正在Web API应用程序上运行一些负载测试,并试图找到一种方法来识别方法OnActionExecutedOnActionExecuting中的每个请求

我的问题是,在对象HttpActionExecutedContextHttpActionContext中,我可以获取某种唯一标识符来标识单个请求。

我曾尝试在查询字符串中添加unix时间戳,但是请求通常是同时出现的,所以这无济于事。

我希望这些对象具有某种属性?

2 个答案:

答案 0 :(得分:2)

您可以使用Dependency Injection添加一个带有生成的标识符的作用域类。 每个请求一次创建一个范围类别。

public class IdentifiedScope
{
    public Guid Id { get; } = Guid.NewGuid();
}

// Startup.cs
public void ConfigureServices(IServiceCollection services)
{
    services.AddScoped<IdentifiedScope>();
}

// Controller
public MyController(IdentifiedScope identifiedScope)
{
    this.identifiedScope = identifiedScope;
}

// Usage in an ActionFilter
public override async Task OnActionExecutionAsync(ActionExecutingContext context,
                                                  ActionExecutionDelegate next)
{
    var identifiedScope = 
           context.HttpContext.RequestServices.GetService<IdentifiedScope>();
}

答案 1 :(得分:2)

如果要检查请求执行时间,可以使用serilog

在您的statup.cs上设置此代码

        Log.Logger = new LoggerConfiguration()
          .Enrich.With<HttpRequestIdEnricher>()
          .Enrich.With<HttpRequestNumberEnricher>()
          .Enrich.With<HttpSessionIdEnricher>()
          .Enrich.With<HttpRequestTraceIdEnricher>()
          .WriteTo.Debug()
          .CreateLogger();
HttpRequestIdEnricher
HttpRequestNumberEnricher
HttpSessionIdEnricher
HttpRequestTraceIdEnricher
     

这些可能是单独的nuget软件包,如果它们会搜索htem   不是Serilog附带的

Install Serilog
and Serilog.Sinks.Debug

对于每个请求,您应该在控制台中看到结果

  

[05:06:14 INF] HTTP GET / api / v1 / blablabla / blablablabla响应401 in   7530ms

希望有帮助