1. 在 Startup.cs 类 ConfigureServices 方法中注入  IHttpContextAccessor;

services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();

2. 在需要使用的类的构造函数注入 IHttpContextAccessor 即可使用;

public class xxxAppService : PlatformAppService
    private readonly IHttpContextAccessor _httpContextAccessor;
    public xxxAppService(IHttpContextAccessor httpContextAccessor)
        _httpContextAccessor = httpContextAccessor;

3.获取 httpContextAccessor.HttpContext.Request.Headers["Authorization"].FirstOrDefault();

完整代码如下:

public class xxxAppService : PlatformAppService
    private readonly IHttpContextAccessor _httpContextAccessor;
    public xxxAppService(IHttpContextAccessor httpContextAccessor)
        _httpContextAccessor = httpContextAccessor;
    public async Task<string> GetHeaders()
        var headers = _httpContextAccessor.HttpContext.Request.Headers;
        return headers["Authorization"];

例如获取 Origin / Referer 信息:

var headers = _httpContextAccessor.HttpContext.Request.Headers;
var origin = headers["Origin"].FirstOrDefault().ToLowerInvariant();
var referer = headers["Referer"].FirstOrDefault().ToLowerInvariant();

凡是总有例外的时候,比如有的场景其实是不能通过注入的方式来实例化 IHttpContextAccessor,下面我们就来处理这种场景。

例如在 Startup 中因为还没有触发请求,所以这时因为各种业务需要 IHttpContextAccessor 就有尴尬了。下面场景是在使用 WebApiClient 中。

背景介绍:提供接口供第三方调用,而接口中其实不做数据处理(暂时),只做转发并且需要将 Header 信息一并转发,其实就是实现了一次透传,而在 ApiActionFilterAttribute 类从 Startup 初始化时就不能获取到 IHttpContextAccessor,这是就需要通过控制反转的方式在被调用时再按需实例化。 

public class ThirdPartyJianweiHttpRegistrarHeaderAttribute : ApiActionFilterAttribute
    private readonly IConfigurationRoot _appConfiguration;
    public ThirdPartyJianweiHttpRegistrarHeaderAttribute(IConfigurationRoot appConfiguration)
        _appConfiguration = appConfiguration;
    public override async Task OnBeginRequestAsync(ApiActionContext context)
        //从请求中获取 Header 并注入 WebApiClient Header 中传递
        var request = context.GetService<IHttpContextAccessor>().HttpContext.Request;
        if (request != null)
            var headers = request.Headers;
            if (headers != null)
                var keyId = headers["keyId"].FirstOrDefault();
                var code = headers["rCode"].FirstOrDefault();
                context.RequestMessage.Headers.Add("keyId", keyId);
                context.RequestMessage.Headers.Add("ts", headers["ts"].FirstOrDefault());
                context.RequestMessage.Headers.Add("rCode", code);
                context.RequestMessage.Headers.Add("signature", headers["signature"].FirstOrDefault());
        await base.OnBeginRequestAsync(context);
    public override Task OnEndRequestAsync(ApiActionContext context)
        return base.OnEndRequestAsync(context);

代码中 context.GetService<IHttpContextAccessor> 实现了 IHttpContextAccessor 实例化。

ASP.NETCore的Kestrel服务器 我们可以理解成,外部访问我们的程序,通过 Http 或者 Https 访问,例如https://localhost:44337/Home/Index,需要通过一个网址,来寻向访问特定... namespace Microsoft.AspNetCore.Http { public interface IHttpContextAccessor { HttpContext HttpContext { get; set; } } } private readonly IHttpContextAccessor _httpContextAcces... Accept 作用: 浏览器端可以接受的媒体类型, 例如:  Accept: text/html  代表浏览器可以接受服务器回发的类型为 text/html  也就是我们常说的html文档, 如果服务器无法返回text/h... 每个请求过来的session可能都不一样,只有在运行时每一次请求上下文中我们获取的session值才是有意义的。 httpcontext 关于http请求过程中涉及到的所有变量或者引用存放的一个仓库。 var headers=HttpContext.Current.Request.Headers; 浏览器提交数据的方式 根据地址栏输入的url 服务器如何获取浏览器提交的数据 1、获取post:context.Request.Form[“txtname”]; 不同于之前的HttpWebRequest类型,在.NET 4.5中新的HttpRequestHeaders类型直接有一个Authorization属性,对应类型是:AuthenticationHeaderValue,同样在System.Net.Http.Headers命名空间内。AuthenticationHeaderValue有两个属性Parameter和Scheme。为了弄清这两个参数在对Au... var headers = app.Context.Request.Headers; Type hdr = headers.GetType(); PropertyInfo ro = hdr.GetProperty("IsReadOnly", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.IgnoreC... 相信用做过登录功能的小伙伴都知道,用户登录成功后的有用信息,如:姓名、用户ID等等,无非这几种做法来保存这些信息,Session、Cookie、QueryString等等。但如今跨平台,百花齐放的时代,小程序啊、APP端啊、多端时代,最常见的就是单点登录,这明显传统上的传参方式就无法满足我们现有的需求。那么就会引用一个新的传参方式:JWT,根据维基百科的定义,JSON WEB Token(JWT),是一种基于JSON的、用于在网络上声明某种主张的令牌(token),是目前最流行的接口认证方案。对于它的 HttpWebRequest是C#原生语法提供的实现了Http协议完整封装的类,可以实现任意类型的Http请求。但是也因为参数众多,导致很多人不容易掌握它。 今天我们来尝试从简入繁的给大家介绍下HttpWebRequest 二.常用属性 AllowAutoRedirect:获取或设置一个值,该值指示请求是否应跟随重定向响应。 CookieContainer:获取或设置与此请求关联的cookie。 Credentials:获取或设置请求的身份验证信息。 KeepAlive:获取或设置 第一次写博客,简单说明以下原因。新手工作半年,用的是C# webservice请求,比较老的技术。有可能我的理解还不是很深,暂且这样认为把。目前做的项目都是请求别人接口,request.ContentType = "application/x-www-form-urlencoded;charset=utf-8";  定义的传输报文体,当然还有其他类型的。但是怎么接收却没做过,网上百度也是没有明确的 学习目标:C#利用WebRequest 类请求网页Headers及内容数据源码练习平台:Windows10企业版(64位)测试工具:MicrosoftVisual Studio2017(版本默认安装)。程序语言:.NET C#主要内容方法:WebRequest request = WebRequest.Create("http://www.baidu.com/");//调用 Create 来创建 ...