为什么 razor 组件中的 HttpContext 为 null?

Ste*_*han 5 httpcontext razor asp.net-core blazor-server-side

我在几个场景中使用了 dotnet core 3.1 Web 应用程序中的HttpContextfrom 。IHttpContextAccessor它总是按照我的预期设置。

但是,当注入Razor 组件HttpContext时,始终为 null 。IHttpContextAccessor

@inject IHttpContextAccessor HttpContextAccessor

<div>...</div>

@code {
    protected override async Task OnInitializedAsync()
    {
        // here, HttpContextAccessor.HttpContext == null
    }

    public string GetSomeInfo()
    {
        // here, HttpContextAccessor.HttpContext == null
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经像这样IHttpContextAccessor添加了Startup.cs/ConfigureServices()

services.AddHttpContextAccessor();
Run Code Online (Sandbox Code Playgroud)

为什么在HttpContext null这里?

小智 2

我通常会向 razor 组件添加一个参数。假设您在 HttpContext.State 中存储了一个字符串并希望在 Razor 组件中显示它:

反剃须刀:

<span>Application Name: @AppTitle</span>

@code {
    [Parameter]
    public HttpContext MyContext { get; set; }

    public string AppTitle => MyContext.State.GetString("APP_KEY");
}
Run Code Online (Sandbox Code Playgroud)

剃刀页面中的组件:

<component type="typeof(Counter)" render-mode="Static" param-MyContext="@HttpContext" />
Run Code Online (Sandbox Code Playgroud)