访问services中的Request头。WebApiCore ConfigureServices中的AddScoped?

Moh*_*yan 5 request request-headers .net-core asp.net-core-webapi

我想为Request的标头中的类实例分配一个值作为单例。
我想ConfigureServicesStartup类的方法中使用.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
    });
}
Run Code Online (Sandbox Code Playgroud)

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

Cal*_*alC 6

干净的方法是改变你的MyClass构造函数如下:

public MyClass(IHttpContextAccessor httpContextAccessor)
{
    this.PropName = httpContextAccessor.HttpContext?.Request?.Headers["PropName"]
}
Run Code Online (Sandbox Code Playgroud)

然后在您的DI设置中:

services.AddScoped<MyClass>();
Run Code Online (Sandbox Code Playgroud)

另外,如果您确实需要在DI设置中访问它,则可以进行如下修改:

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