在 WebApi Core ConfigureServices 中访问 services.AddScoped 中的请求标头?

Posted

技术标签:

【中文标题】在 WebApi Core ConfigureServices 中访问 services.AddScoped 中的请求标头?【英文标题】:Access to Request's header in services.AddScoped in WebApi Core ConfigureServices? 【发布时间】: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 的标头?

【问题讨论】:

【参考方案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"];
);

【讨论】:

以上是关于在 WebApi Core ConfigureServices 中访问 services.AddScoped 中的请求标头?的主要内容,如果未能解决你的问题,请参考以下文章

在 IIS 上部署 .Net Core WebAPI 项目

Net Core中webapi接口返回结果json化

在 ASP.Net Core 5 WebAPI 中启用 CORS

如何在 Asp.Net Core 3.0 WebAPI 中启用 CORS

如何在.net core web 中将 url 设置为 webapi?

ASP.NET Core WebApi返回结果统一包装实践