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 来创建 ...