【问题标题】:Access to Request's header in services.AddScoped in WebApi Core ConfigureServices?在 WebApi Core ConfigureServices 中访问 services.AddScoped 中的请求标头?
【发布时间】:2018-05-12 22:43:37
【问题描述】:
我想将一个值分配给从请求的标头到每个请求的类实例作为单例。
我想在Startup 类的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 的标头?
【问题讨论】:
标签:
request
.net-core
asp.net-core-webapi
request-headers
【解决方案1】:
最干净的方法是如下更改您的 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"];
});