ASP.NET Core开发之HttpContext

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 属性。

原文地址:http://www.cnblogs.com/linezero/p/6801602.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/325670.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

移动WEB页面开发

一、如今的移动行业&#xff1a; 1.移动互联网的发展 2.智能手机迅速发展 3.移动WEB应用的发展 4.移动端的开发需求逐年增加 二、移动网页开发和pc网页开发的区别&#xff1a; 1.终端设备及浏览器 2.分辨率 3.视口 4.输入特性&#xff1a; 鼠标、键盘 触摸 三、PC端开发浏览器:…

数据库事务的四大特征

什么是事务&#xff1f; 事务&#xff1a;是数据库操作的最小工作单元&#xff0c;是作为单个逻辑工作单元执行的一系列操作&#xff1b;这些操作作为一个整体一起向系统提交&#xff0c;要么都执行&#xff0c;要么都不执行&#xff1b;事务是一组不可再分割的操作集合&#…

.NET的一点历史故事:Novell的崩溃和Xamarin的重生

Novell 是一家神奇的技术公司&#xff0c;它自行开发和收购了很多不错的软件和标准&#xff0c;涵盖 NetWare、IPX、WordPerfect、Quattro Pro&#xff0c;Unix&#xff0c;SUSE和Mono。它曾有心挑战微软的霸权&#xff0c;最后不免以失败收场&#xff0c;但在开源运动的发展历…

两步验证杀手锏:Java 接入 Google 身份验证器实战

转载自 两步验证杀手锏&#xff1a;Java 接入 Google 身份验证器实战 什么是两步验证&#xff1f; 大家应该对两步验证都熟悉吧&#xff1f;如苹果有自带的两步验证策略&#xff0c;防止用户账号密码被盗而锁定手机进行敲诈&#xff0c;这种例子屡见不鲜&#xff0c;所以苹…

JS删除之前弹出一个带有确认和取消按钮的提示框confirm()

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head><meta http-equiv"Content-Type" content"text/html; charsetUTF-8"><title>添加删除记录…

马戏团表演

一、控制结构&#xff1a; 1.顺序结构 2.选择结构 3.循环结构 二、顺序结构&#xff1a; 1.含义&#xff1a;程序从上到下执行&#xff0c;在编程中&#xff0c;一般都是从第一行代码开始往下执行&#xff0c;在scratch中&#xff0c;从第一个积木开始往下执行。 三、流程图&am…

剑英的区块链学习手记(一)

开篇布拉拉 因为参与了小蚁的c#智能合约编译器的开发&#xff0c;让我第一次近距离接触到区块链技术。 以前我对区块链技术的了解&#xff0c;只知道有一种叫做比特币的玩意儿&#xff0c;以前有同事在几百块一个比特币的时候屯了一批&#xff0c;后来价格炒高了&#xff0c;…

C++比较两个字符串是否完全相同

在写程序的过程中&#xff0c;经常会遇到要比较两个字符串是否相等的情况。如果要比较的对象是char字符串&#xff0c;则利用 int strcmp(const char s1,const char* s2) 当s1 < s2时&#xff0c;返回为负数&#xff1b; 当s1 s2时&#xff0c;返回值 0&#xff1b; 当s1 &…

跟我学 Java 8 新特性之 Stream 流(五)映射

转载自 跟我学 Java 8 新特性之 Stream 流&#xff08;五&#xff09;映射 经过了前面四篇文章的学习&#xff0c;相信大家对Stream流已经是相当的熟悉了&#xff0c;同时也掌握了一些高级功能了&#xff0c;如果你之前有阅读过集合框架的基石 Collection 接口&#xff0c;是…

JS中DOM节点的CRUD

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title><script type"text/javascript">window.onload function(){//获取body标签//var body document.getElementsByTagName("body")[…

深入.net框架

一、.net框架&#xff1a; 1.基础框架 2.运行环境 3.强大的类库 二、.net的两个重要组件 1.CLR&#xff1a;公共语言运行时 2.框架类库 三、CLR里面包含&#xff1a; 1.CLS&#xff1a;公共语言规范&#xff0c;包括了几种面向对象的编程语言的通用功能 2.CTS&#xff1a;通用系…

.NET Core 2.0体验

.NET Core 2.0预览版及.NET Standard 2.0 Preview 这个月也就要发布了。具体相关信息可以查看之前的文章.NET Core 2.0及.NET Standard 2.0。 今天来实际体验.NET Core 2.0&#xff0c;正式版发布还需要一段时间。 .NET Core 2.0 本文使用的是 nightly .NET Core 2.0 runtim…

跟我学 Java 8 新特性之 Stream 流(四)并行流

转载自 跟我学 Java 8 新特性之 Stream 流&#xff08;四&#xff09;并行流 随着对流API认识的慢慢深入&#xff0c;本章我们要讨论的知识点是流API里面的并行流了。 在开始讨论并行流之前&#xff0c;我先引发一下大家的思考&#xff0c;就你看到这篇文章的时间&#xff…

运算和统计

一、变量&#xff1a; 1.是一种内容不固定的项&#xff0c;数据内容会因程序的运行而改变。 2.将变量存在计算机内存中&#xff0c;便于程序调用 3.变量有变量类型、变量名和值。 二、变量的类型&#xff1a; 1.字符串类型&#xff1a;存储姓名&#xff0c;性别&#xff0c;一句…

JS浏览器加载一个页面的过程

加载过程->从上向下逐行进行加载 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title><script type"text/javascript">/** 浏览器在加载一个页面时&#xff0c;是按照自上向下的顺序加载的&…

MyBatis第四天(多表查询)

地址&#xff1a;引用MyBatis第四天&#xff08;多表查询&#xff09;

统一的.NET文档体验发布

Microsoft发布了新的.NET API阅读器。该阅读器可以查找所有相关的.NET文档。第一版中包括了.NET Framework、.NET Core、.NET Standard、Xamarin和Azure NuGet软件包的参考文档&#xff0c;并可根据用户反馈添加其它领域的文档。 该阅读器提供了在同一处搜索、展示、发现和浏览…

深入C#数据类型

一、类&#xff1a; 一组相同属性和方法的对象的集合 二、对象&#xff1a; 用来描述客观事物的实体 三、类和对象的关系&#xff1a; 抽象和具体的关系 四、封装&#xff1a; 隐藏内部细节&#xff0c;对外提供公共的接口&#xff0c;又称为信息隐藏。 五、封装的好处&#xf…

跟我学 Java 8 新特性之 Stream 流(三)缩减操作

转载自 跟我学 Java 8 新特性之 Stream 流&#xff08;三&#xff09;缩减操作 和前面两篇文章一起服用&#xff0c;效果会更佳。通过对流API的基础体验Demo和关键知识点的讲解&#xff0c;相信大家对流API都有一定的认识了&#xff0c;但是流API强大的功能&#xff0c;可不…