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

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

我尝试将unix时间戳添加到我的查询字符串中,但是请求通常同时进入,因此这无济于事。

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

最佳答案

您可以使用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>();
}

09-10 00:45