ASP.NET Core中的HttpContext开发,在ASP.NET开发中我们总是会经常用到HttpContext。

那么在ASP.NET Core中要如何使用HttpContext呢,下面就来具体学习ASP.NET Core HttpContext。

注入HttpContextAccessor

ASP.NET Core中提供了一个IHttpContextAccessor接口,HttpContextAccessor 默认实现了它简化了访问HttpContext。

它必须在程序启动时在IServicesCollection中注册,这样在程序中就能获取到HttpContextAccessor,并用来访问HttpContext。

services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();

获取HttpContextAccessor

下面来实际做一个操作,获取 HttpContextAccessor。

新建一个ASP.NET Core Web 应用程序,选择Web 应用程序。 身份验证勾选为不进行身份验证。

然后在HomeController 加入如下代码:

    public class HomeController : Controller{        private IHttpContextAccessor _accessor;        public HomeController(IHttpContextAccessor accessor){_accessor = accessor;}        public IActionResult Index(){            var httpcontext = _accessor.HttpContext;            return View();}}

这样就能获取到 HttpContext

运行以后就能获取到 HttpContext 对象。上面也说到,必须在程序启动时注入才能获取到HttpContextAccessor。

那么新建的程序是在哪注入的呢。

这里就是在

        public void ConfigureServices(IServiceCollection services){            // Add framework services.            services.AddMvc();}

services.AddMvc() 中注入。

实现HttpContext.Current

大家在ASP.NET 中大量用 HttpContext.Current获取HttpContext ,现在ASP.NET Core已经不这么做了。

不过如果你还是想用静态  HttpContext.Current ,降低迁移旧程序的成本,还是可以实现的。

新建一个静态 HttpContext 类,

    public static class HttpContext{        private static IHttpContextAccessor _accessor;        public static Microsoft.AspNetCore.Http.HttpContext Current => _accessor.HttpContext;        internal static void Configure(IHttpContextAccessor accessor){_accessor = accessor;}}

然后接着再添加一个扩展类。

    public static class StaticHttpContextExtensions{        public static void AddHttpContextAccessor(this IServiceCollection services){services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();}        public static IApplicationBuilder UseStaticHttpContext(this IApplicationBuilder app){            var httpContextAccessor = app.ApplicationServices.GetRequiredService<IHttpContextAccessor>();HttpContext.Configure(httpContextAccessor);            return app;}}

接着就可以在Startup 类中进行调用。

默认情况下如果在MVC项目中直接调用  UseStaticHttpContext() 即可。

        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory){app.UseStaticHttpContext();

在没有注入 HttpContextAccessor的项目中,还需在ConfigureServices 方法中调用

services.AddHttpContextAccessor();

然后就可以在其他地方使用HttpContext.Current。

        public IActionResult Index(){var statichttpcontext = HttpContextDemo.HttpContext.Current;            return View();}

这里演示的是在Controller 中调用,其实更多的是在其他地方调用,如中间件及一些自己写的Service。

Controller 中其实可以直接使用HttpContext,ControllerBase类中有一个HttpContext 属性。

转载于:https://blog.51cto.com/33997k7k/1924430

ASP.NET Core开发之HttpContext相关推荐

  1. asp.net core 自定义基于 HttpContext 的 Serilog Enricher

    asp.net core 自定义基于 HttpContext 的 Serilog Enricher Intro 通过 HttpContext 我们可以拿到很多有用的信息,比如 Path/QuerySt ...

  2. asp.net core后台系统登录的快速构建

    登录流程图 示例预览 构建步骤 当然,你也可以直接之前前往coding仓库查看源码,要是发现bug记得提醒我啊~ LoginDemo地址 1. 首先你得有一个项目 2. 然后你需要一个登录页面 完整L ...

  3. ASP.NET Core 运行原理解剖[4]:进入HttpContext的世界

    本系列文章从源码分析的角度来探索 ASP.NET Core 的运行原理,分为以下几个章节: ASP.NET Core 运行原理解剖[1]:Hosting ASP.NET Core 运行原理解剖[2]: ...

  4. Dependency injection in ASP.NET Core

    原文 github地址 ASP.NET Core supports the dependency injection (DI) software design pattern, which is a ...

  5. ASP.NET Core 认证与授权[1]:初识认证

    在ASP.NET 4.X 中,我们最常用的是Forms认证,它既可以用于局域网环境,也可用于互联网环境,有着非常广泛的使用.但是它很难进行扩展,更无法与第三方认证集成,因此,在 ASP.NET Cor ...

  6. 《ASP.NET Core 微服务实战》-- 读书笔记(第3章)

    第 3 章 使用 ASP.NET Core 开发微服务 微服务定义 微服务是一个支持特定业务场景的独立部署单元.它借助语义化版本管理.定义良好的 API 与其他后端服务交互.它的天然特点就是严格遵守单 ...

  7. 【新书推荐】《ASP.NET Core微服务实战:在云环境中开发、测试和部署跨平台服务》 带你走近微服务开发...

    <ASP.NET Core 微服务实战>译者序:https://blog.jijiechen.com/post/aspnetcore-microservices-preface-by-tr ...

  8. ASP.NET Core 框架本质学习

    本文作为学习过程中的一个记录. 学习文章地址: https://www.cnblogs.com/artech/p/inside-asp-net-core-framework.html 一. ASP.N ...

  9. 《ASP.NET Core 微服务实战》译者序

    最近,我将<ASP.NET Core 微服务实战>一书由英文翻译为中文.这本书是由清华大学出版社引进的,目前还处于最后的排版校对过程中,现将该书的译者序发表于此. 以下为译者译全文: &q ...

最新文章

  1. Galaxy 生信平台(三):xlsx 上传与识别
  2. java logic_Java Logic总结2
  3. spark大数据基本概念整理以及软件下载链接
  4. JAVA实体类不要使用基本类型,基本类型包含byte、int、short、long、float、double、char、boolean...
  5. Javascript实现的倒计时时钟
  6. 信息与计算科学偏计算机的学校,信息与计算科学:披着计算机“外衣”的数学专业...
  7. ETL设计详解(数据抽取、清洗与转换)
  8. Android 自定义带文字图片的view,宝马上线娱乐亚洲第一-宝马上线娱乐亚洲第一...
  9. 连点4次android版本,连点器极速版下载-连点器快速版v4.0.8 安卓版 - 极光下载站...
  10. python完全平方数_python判断完全平方数的方法
  11. 微信安卓客户端逆向分析
  12. html怎么做qq空间主页,如何设计qq空间
  13. bugly怎么读_腾讯Bugly学习了解
  14. 超微服务器如何查看服务器信息,超微服务器远程
  15. 陶瓷电容的简单介绍--MLCC(NPO,C0G,X7R和Y5V等),瓷片电容(低频瓷介电容和高频瓷介电容)
  16. C# 数字转换成数组
  17. 使用chrome浏览器插件postman模拟post、get请求
  18. Windows Service 2012 IIS Microsoft excel Application
  19. 【Python】turtle小海龟画兔子
  20. 简述计算机仿真的基本步骤,计算机仿真技术试卷.doc

热门文章

  1. 30道linux面试题与答案(21-30)
  2. 监控组策略应用---组策略建模
  3. [收集] Web服务相关的, 介绍框架(framework)类的论文
  4. 对于初学者Python开发难学吗?适合初学者吗?
  5. 零基础入门学习Python,我与python的第一次亲密接触后的感受!
  6. mysql反弹提权_MySQL数据库反弹端口连接提权
  7. 微信开发者和其他服务器区别,求教微信公众号开发中两种认证技术的区别?
  8. mac微软雅黑字体_【字体字重】常见设计稿字体对应字重
  9. oracle列字符可以增加长度,ORACLE字符列长度语义
  10. 新闻更新php html,phphtml 新闻发布系统,运用php+mysql,里面包括数据库和php文件。 Other systems 其他 249万源代码下载- www.pudn.com...