You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core 7.0 Razor Pages中Context不存在及Cookie同意配置问题

解决ASP.NET Core 7.0 Razor页面Cookie同意政策配置的上下文问题

问题根源

你遇到的Context不存在错误,是因为带@page指令的文件是独立的Razor Page,而非普通的MVC视图或共享视图片段——Razor Page中无法直接使用Context这个默认上下文对象;而直接替换成HttpContext后为null,是因为Razor Page的代码块中不能直接访问未注入的HttpContext实例。

另外,你将此文件放在Shared文件夹,大概率是想做成可复用的Cookie同意横幅组件,此时@page指令反而会让它变成独立页面,不符合复用需求,建议先移除@page指令(如果是做共享组件的话)。

解决方案

方案1:针对Razor Page(保留@page的情况)

在Razor Page中,通过PageModel的HttpContext属性获取上下文:

@page
@model MYCompany.Pages.IndexPortalModel
@using Microsoft.AspNetCore.Http.Features

@{
    var consentFeature = Model.HttpContext.Features.Get<ITrackingConsentFeature>();
    var showBanner = !consentFeature?.CanTrack ?? false;
    var cookieString = consentFeature?.CreateConsentCookie();
}

方案2:针对共享视图/组件(移除@page的情况)

如果是做共享组件,先移除@page指令,然后用以下两种方式之一:

方式A:使用视图上下文(适用于MVC视图/布局页)

移除@page后,直接使用Context即可正常工作:

@model MYCompany.Pages.IndexPortalModel
@using Microsoft.AspNetCore.Http.Features

@{
    var consentFeature = Context.Features.Get<ITrackingConsentFeature>();
    var showBanner = !consentFeature?.CanTrack ?? false;
    var cookieString = consentFeature?.CreateConsentCookie();
}
方式B:注入IHttpContextAccessor(通用方案)

如果需要在多种场景下复用,先在Program.cs中注册服务:

builder.Services.AddHttpContextAccessor();

然后在Razor文件中注入并使用:

@inject IHttpContextAccessor HttpContextAccessor
@using Microsoft.AspNetCore.Http.Features

@{
    var consentFeature = HttpContextAccessor.HttpContext?.Features.Get<ITrackingConsentFeature>();
    var showBanner = !consentFeature?.CanTrack ?? false;
    var cookieString = consentFeature?.CreateConsentCookie();
}

额外注意点

确保你已经完成Program.cs中的必要配置:

  • 添加了Cookie政策中间件(app.UseCookiePolicy();)
  • 配置了对应的Cookie选项

内容的提问来源于stack exchange,提问作者CJ-44

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 01:27:17