2017-11-29 1 views
2

Ich möchte einer Klasseninstanz einen Wert aus Requests Header zu jeder Anfrage als Singleton zuweisen.
Ich wollte es mit .net-Core in Methode in Startup Klasse zuordnen.
Etwas wie folgt aus:Zugriff auf Requests Header in services.AddScoped in WebApi Core ConfigureServices?

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 
    }); 
} 

Wie kann ich Anfrage Header in AddScoped Methode zugreifen?

Antwort

3

Der sauberste Ansatz ist Ihr MyClass Constructor wie folgt zu ändern:

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

Dann in Ihrem DI-Setup:

services.AddScoped<MyClass>(); 

Alternativ, wenn Sie wirklich diese zugreifen müssen in Ihre DI-Konfiguration können Sie wie folgt ändern:

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