今天就跟大家聊聊有關(guān)HttpContext如何在ASP.NET Core5.0項(xiàng)目中進(jìn)行訪問,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)建站!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了澄邁免費(fèi)建站歡迎大家使用!ASP.NET Core 應(yīng)用通過 IHttpContextAccessor 接口及其默認(rèn)實(shí)現(xiàn) HttpContextAccessor 訪問 HttpContext。 只有在需要訪問服務(wù)內(nèi)的 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 身份驗(yàn)證檢索 Intranet 應(yīng)用中的當(dāng)前用戶名:
@{ 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 的其他框架和自定義組件,建議使用內(nèi)置的依賴項(xiàng)注入容器來注冊依賴項(xiàng)。 依賴項(xiàng)注入容器向任意類提供 IHttpContextAccessor,以供類在自己的構(gòu)造函數(shù)中將它聲明為依賴項(xiàng):
public void ConfigureServices(IServiceCollection services) { services.AddControllersWithViews(); services.AddHttpContextAccessor(); services.AddTransient<IUserRepository, UserRepository>(); }
如下示例中:
UserRepository 聲明自己對 IHttpContextAccessor 的依賴。
當(dāng)依賴項(xiàng)注入容器解析依賴鏈并創(chuàng)建 UserRepository 實(shí)例時,就會注入依賴 項(xiàng)。
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 不是線程安全型。 在處理請求之外讀取或?qū)懭?HttpContext 的屬性可能會導(dǎo)致 NullReferenceException。
要使用 HttpContext 數(shù)據(jù)安全地執(zhí)行后臺工作,請執(zhí)行以下操作:
在請求處理過程中復(fù)制所需的數(shù)據(jù)。
將復(fù)制的數(shù)據(jù)傳遞給后臺任務(wù)。
要避免不安全代碼,請勿將 HttpContext 傳遞給執(zhí)行后臺工作的方法。 而是傳遞所需要的數(shù)據(jù)。 在以下示例中,調(diào)用 SendEmailCore,開始發(fā)送電子郵件。 將 correlationId 傳遞到 SendEmailCore,而不是 HttpContext。 代碼執(zhí)行不會等待 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) { ... } }
看完上述內(nèi)容,你們對HttpContext如何在ASP.NET Core5.0項(xiàng)目中進(jìn)行訪問有進(jìn)一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。
標(biāo)題名稱:HttpContext如何在ASP.NETCore5.0項(xiàng)目中進(jìn)行訪問-創(chuàng)新互聯(lián)
URL網(wǎng)址:http://bm7419.com/article46/dioheg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、網(wǎng)站維護(hù)、虛擬主機(jī)、品牌網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè)、小程序開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容