我正在Web API应用程序上运行一些负载测试,并试图找到一种方法来识别方法OnActionExecuted
和OnActionExecuting
中的每个请求
我的问题是,在对象HttpActionExecutedContext
和HttpActionContext
中,我可以获取某种唯一标识符来标识单个请求。
我曾尝试在查询字符串中添加unix时间戳,但是请求通常是同时出现的,所以这无济于事。
我希望这些对象具有某种属性?
答案 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
希望有帮助