在ASP.NET Core5.0中访问HttpContext的方法步骤_实用技巧

来源:脚本之家  责任编辑:小易  

www.zgxue.com防采集请勿采集本网。

ASP.NET Core 应用通过 IHttpContextAccessor 接口及其默认实现 HttpContextAccessor 访问 HttpContext。 只有在需要访问服务内的 HttpContext 时,才有必要使用 IHttpContextAccessor。

通过 Razor Pages 使用 HttpContext

Razor Pages PageModel 公开 HttpContext 属性:

public class AboutModel : PageModel{ public string Message { get; set; } public void OnGet() { Message = HttpContext.Request.PathBase; }}

通过 Razor 视图使用 HttpContext

Razor 视图通过视图上的 RazorPage.Context 属性直接公开 HttpContext。 下面的示例使用 Windows 身份验证检索 Intranet 应用中的当前用户名:

@{ var username = Context.User.Identity.Name; ...}

通过控制器使用 HttpContext

控制器公开 ControllerBase.HttpContext 属性:

public class HomeController : Controller{ public IActionResult About() { var pathBase = HttpContext.Request.PathBase; ... return View(); }}

通过中间件使用 HttpContext

使用自定义中间件组件时,HttpContext 传递到 Invoke 或 InvokeAsync 方法,在中间件配置后可供访问:

public class MyCustomMiddleware{ public Task InvokeAsync(HttpContext context) { ... }}

通过自定义组件使用 HttpContext

对于需要访问 HttpContext 的其他框架和自定义组件,建议使用内置的依赖项注入容器来注册依赖项。 依赖项注入容器向任意类提供 IHttpContextAccessor,以供类在自己的构造函数中将它声明为依赖项:

public void ConfigureServices(IServiceCollection services){ services.AddControllersWithViews(); services.AddHttpContextAccessor(); services.AddTransient<IUserRepository, UserRepository>();}

如下示例中: UserRepository 声明自己对 IHttpContextAccessor 的依赖。 当依赖项注入容器解析依赖链并创建 UserRepository 实例时,就会注入依赖 项。

public class UserRepository : IUserRepository{ private readonly IHttpContextAccessor _httpContextAccessor; public UserRepository(IHttpContextAccessor httpContextAccessor) { _httpContextAccessor = httpContextAccessor; } public void LogCurrentUser() { var username = _httpContextAccessor.HttpContext.User.Identity.Name; service.LogAccessRequest(username); }}

从后台线程访问 HttpContext

HttpContext 不是线程安全型。 在处理请求之外读取或写入 HttpContext 的属性可能会导致 NullReferenceException。

要使用 HttpContext 数据安全地执行后台工作,请执行以下操作: 在请求处理过程中复制所需的数据。 将复制的数据传递给后台任务。

要避免不安全代码,请勿将 HttpContext 传递给执行后台工作的方法。 而是传递所需要的数据。 在以下示例中,调用 SendEmailCore,开始发送电子邮件。 将 correlationId 传递到 SendEmailCore,而不是 HttpContext。 代码执行不会等待 SendEmailCore 完成:

public class EmailController : Controller{ public IActionResult SendEmail(string email) { var correlationId = HttpContext.Request.Headers["x-correlation-id"].ToString(); _ = SendEmailCore(correlationId); return View(); } private async Task SendEmailCore(string correlationId) { ... }}

到此这篇关于在ASP.NET Core5.0中访问HttpContext的方法步骤的文章就介绍到这了,更多相关ASP.NET Core 访问 HttpContext内容请搜索真格学网以前的文章或继续浏览下面的相关文章希望大家以后多多支持真格学网! 您可能感兴趣的文章:asp.net Context.Handler 页面间传值方法

鉴于你已经抄可以替换单页面的袭HttpContext.Current.User对象。那么下面你需要做bai的事添加一个duGlobal.asax//注册获取zhi用户信息的事件,并且在dao其中写上你修改单个页面的代码protected void Application_AuthenticateRequest(object sender, EventArgs e){    //你修改单个页面的代码,写在这里。这样整个管道中的HttpContext.Current.User都将改变。},HttpContext.Current.User是IPrincipal接口类型,如果想实现你说的这种,需要自己实现这个IPrincipal就可以的,不可能的 这个属性就是用户的姓名 不可能为对象 除非不用ASP.NET提供的这个 自己写那就可以自定义更多追问追答追问我并没有说过是对象啊。我说的因为我们公司的就实现了这个,所以我才问,我有源代码,但是太多没找到是哪里做了这个操作追答我想问的是怎么在整个用户访问期间,httpcontext.current.user 对象 都是我自定义的对象咯 这是你的原话 你就是想要整个用户对象 但是这个不可以的追问这个是可以的,因为 我已经实现了,是在微软的.NET DEVELOP 官方网站上看见的资料。我已经做出来了 你不用怀疑,你要获取,你就必须先存进去, 什么时候存进去? 当时是在登陆 验证成功后, 把用户信息存进去。怎么放进去 得看你代码了追问请问怎么放进去啊,我要用户登录后的每个访问页面的 httpcontext.current.user.identity.name 值都是这个用户。追答得看你代码内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • asp.net 网站开发中常用到的广告效果代码
  • 页面爬虫(获取其他页面html)加载到自己页面示例
  • gridview常用操作事件图文介绍
  • .net三层结构初探分析
  • .net装饰模式讲解
  • .net 单例模式(singleton)
  • .net core如何利用concurrenttest组件对方法进行压力测试详解
  • “/”应用程序中的服务器错误
  • asp.net aspnetpager分页统计时与实际不符的解决办法
  • coolite cool study 3 mvc + coolite 的实现代码
  • ASP.NET C#中怎么让 httpcontext.current.user.ide...
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全基础应用实用技巧自学过程首页asp.netasp.net context.handler 页面间传值方法asp.net 网站开发中常用到的广告效果代码页面爬虫(获取其他页面html)加载到自己页面示例gridview常用操作事件图文介绍.net三层结构初探分析.net装饰模式讲解.net 单例模式(singleton).net core如何利用concurrenttest组件对方法进行压力测试详解“/”应用程序中的服务器错误asp.net aspnetpager分页统计时与实际不符的解决办法coolite cool study 3 mvc + coolite 的实现代码未将对象引用设置到对象的实例 (java正则表达式 pattern和matcheasp.net(c#)网页跳转七种方法小结未能加载文件或程序集“xxx”或它asp.net“服务器应用程序不可用”asp.net中的几种弹出框提示基本实asp.net gridview 72般绝技asp.net生成excel并导出下载五种asp.net对路径"xxxxx"asp.net汉字转拼音和获取汉字首字asp.net membership 密码重设asp.net中资源文件的使用asp.net中使用ajax的方法asp.net数据验证控件asp.net 不用gridview自带删除功能,删除一使用ajaxpro.net框架实现在客户端调用服务asp.net网站实时显示时间的方法mvc网站开发之权限管理篇asp.net sqldataadapter对象使用札记asp.net mvc5网站开发之业务逻辑层的架构
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved