ASP.NET Core [3]:进入HttpContext的世界(笔记)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了ASP.NET Core [3]:进入HttpContext的世界(笔记),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2360字,纯文字阅读大概需要4分钟。
内容图文
参考:http://www.cnblogs.com/RainingNight/p/httpcontext-in-asp-net-core.html
HttpContext是ASP.NET中的核心对象,每一个请求都会创建一个对应的HttpContext对象,我们的应用程序便是通过HttpContext对象来获取请求信息,最终生成响应,写回到HttpContext中,完成一次请求处理。
1、 WebHost 在启动 IServer 时,会传入一个 IHttpApplication<TContext> 类型的对象,Server 负责对请求的监听,在接收到请求时,会调用该对象的 ProcessRequestAsync 方法将请求转交给我们的应用程序。
2、 首先使用 IHttpContextFactory
来创建 HttpContext 实例,然后在 ProcessRequestAsync
方法中调用上一章介绍的 RequestDelegate,由此进入到我们的应用程序当中。IHttpApplication<TContext>
的默认实现为 HostingApplication
,有如下定义:
public class HostingApplication : IHttpApplication<HostingApplication.Context> { privatereadonly RequestDelegate _application; privatereadonly IHttpContextFactory _httpContextFactory;
//创建httpcontext实例 public Context CreateContext(IFeatureCollection contextFeatures) { var context = new Context(); var httpContext = _httpContextFactory.Create(contextFeatures); _diagnostics.BeginRequest(httpContext, ref context); context.HttpContext = httpContext; return context; // } //调用 ProcessRequestAsync 方法将请求转交给我们的应用程序。 public Task ProcessRequestAsync(Context context) { return _application(context.HttpContext); } publicvoid DisposeContext(Context context, Exception exception) { var httpContext = context.HttpContext; _diagnostics.RequestEnd(httpContext, exception, context); _httpContextFactory.Dispose(httpContext); _diagnostics.ContextDisposed(context); } }
HttpContext
HttpContext 对象我们应该都很熟悉了,它用来表示一个抽象的HTTP上下文,而HttpContext对象的核心又体现在用于描述请求的Request和描述响应的Response属性上。
HttpRequest
HttpRequest 可以用来获取到描述当前请求的各种相关信息,比如请求的协议(HTTP或者HTTPS)、HTTP方法、地址,以及该请求的请求头,请求体等:HttpRequest是一个抽象类,它的默认实现是DefaultHttpRequest:
HttpResponse
在了解了表示请求的抽象类 HttpRequest
之后,我们再来认识一下与它对应的,用来描述响应的 HttpResponse
类型:HttpResponse也是一个抽象类,我们使用它来输出对请求的响应,如设置HTTP状态码,Cookies,HTTP响应报文头,响应主体等,以及提供了一些将响应发送到客户端时的相关事件。
IHttpContextAccessor
ASP.NET Core 中一切皆注入,更加推荐使用注入的方式来获取实例,而非使用静态变量。因此,ASP.NET Core 提供了一个 IHttpContextAccessor
接口,用来统一获取当前请求的 HttpContext 实例的方式:
public interface IHttpContextAccessor { HttpContext HttpContext { get; set; } }
ASP.NET Core 默认并没有注入 IHttpContextAccessor
对象,如果我们想在应用程序中使用它,则需要手动来注册:
public void ConfigureServices(IServiceCollection services) { services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>(); }
ASP.NET Core 使用 AsyncLocal<T>
来保证线程内的唯一实例。
原文:https://www.cnblogs.com/fuyouchen/p/9559707.html
内容总结
以上是互联网集市为您收集整理的ASP.NET Core [3]:进入HttpContext的世界(笔记)全部内容,希望文章能够帮你解决ASP.NET Core [3]:进入HttpContext的世界(笔记)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。