今天就跟大家聊聊有关HttpContext如何在ASP。净Core5.0项目中进行访问,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
ASP。净核心应用通过IHttpContextAccessor接口及其默认实现HttpContextAccessor访问HttpContext。只有在需要访问服务内的HttpContext时,才有必要使用IHttpContextAccessor。
<强>通过剃须刀页面使用HttpContext 强> <强>
强>
剃刀页面PageModel公开HttpContext属性:
public class AboutModel : PageModel { public 才能string Message {组,得到,,,} public 才能;void  OnGet () {才能 ,,,Message =, HttpContext.Request.PathBase; ,,} }
<>强通过剃须刀视图使用HttpContext 强>
剃刀视图通过视图上的RazorPage。上下文属性直接公开HttpContext。下面的示例使用Windows身份验证检索内部网应用中的当前用户名:
@ { var 才能;username =, Context.User.Identity.Name; ,, ,,… }
<>强通过控制器使用HttpContext 强>
控制器公开ControllerBase。HttpContext属性:
public class HomeController :控制器 { public 才能;IActionResult 约() {才能 ,,,var pathBase =, HttpContext.Request.PathBase; ,,,… ,,,return 视图(); ,,} }
<>强通过中间件使用HttpContext 强>
使用自定义中间件组件时,HttpContext传递到调用或InvokeAsync方法,在中间件配置后可供访问:
public class MyCustomMiddleware { public 才能;Task  InvokeAsync (HttpContext 上下文) {才能 ,,,… ,,} }
<>强通过自定义组件使用HttpContext
强>
对于需要访问HttpContext的其他框架和自定义组件,建议使用内置的依赖项注入容器来注册依赖项。依赖项注入容器向任意类提供IHttpContextAccessor,以供类在自己的构造函数中将它声明为依赖项:
public void ConfigureServices (IServiceCollection 服务) { ,,services.AddControllersWithViews (); ,,services.AddHttpContextAccessor (); ,,services.AddTransient(); }
如下示例中:
- <李>
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(用户名); ,,} }
<强>从后台线程访问HttpContext 强>
HttpContext不是线程安全型。在处理请求之外读取或写入HttpContext的属性可能会导致得到NullReferenceException。
要使用HttpContext数据安全地执行后台工作,请执行以下操作:
- <李>
在请求处理过程中复制所需的数据。
李> <李>将复制的数据传递给后台任务。
李>要避免不安全代码,请勿将HttpContext传递给执行后台工作的方法。而是传递所需要的数据。在以下示例中,调用SendEmailCore,开始发送电子邮件。将correlationId传递到SendEmailCore,而不是HttpContext。代码执行不会等待SendEmailCore完成:
public class EmailController :控制器 { public 才能;IActionResult  SendEmail (string 电子邮件) {才能 ,,,var correlationId =, HttpContext.Request.Headers [“x-correlation-id"] .ToString (); ,,,_ =, SendEmailCore (correlationId); ,,,return 视图(); ,,} private 才能async Task  SendEmailCore (string correlationId) {才能 ,,,… ,,} }
看完上述内容,你们对HttpContext如何在ASP。净Core5.0项目中进行访问有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。