在 WebApi Core ConfigureServices 中访问请求的 header in services.AddScoped?

Access to Request's header in services.AddScoped in WebApi Core ConfigureServices?

我想为请求的 header 中的 class 实例分配一个值给每个请求作为单例。
我想在 Startup class.
中的 ConfigureServices 方法中用 .net core 分配它 像这样:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();

    services.AddScoped<MyClass>(provider =>
    {
        var myClass = new MyClass();
        myClass.PropName = provider.Request.Headers["PropName"]; // I want to access Request Header here
    });
}

如何在 AddScoped 方法中访问 Request 的 header?

最干净的方法 是按如下方式更改您的 MyClass 构造函数:

public MyClass(IHttpContextAccessor httpContextAccessor)
{
    this.PropName = httpContextAccessor.HttpContext?.Request?.Headers["PropName"]
}

然后在您的 DI 设置中:

services.AddScoped<MyClass>();

或者,如果你确实需要在你的DI设置中访问这个,你可以修改如下:

services.AddScoped<MyClass>(provider =>
{
    var myClass = new MyClass();
    myClass.PropName = provider.GetService<IHttpContextAccessor>()?.HttpContext?.Request?.Headers["PropName"];
});