HttpContext如何在ASP。净Core5.0项目中进行访问

  介绍

今天就跟大家聊聊有关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项目中进行访问有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

HttpContext如何在ASP。净Core5.0项目中进行访问