在ASP.NET Core5.0中访问HttpContext的方法步骤
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内容请搜刮剧本之家早年的文章或继承赏识下面的相干文章但愿各人往后多多支持剧本之家! (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |