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

Blazor Server应用(IIS部署):如何遍历服务器与会话变量?

在Blazor Server(IIS部署)中遍历服务器变量与会话变量

一、遍历服务器变量

Blazor Server 基于 ASP.NET Core,无法直接像经典ASP/ASP.NET那样访问Request.ServerVariables,需要通过IHttpContextAccessor获取当前请求的HttpContext,再从中提取对应信息。

步骤1:注册服务

在项目根目录的Program.cs中注册IHttpContextAccessor服务:

builder.Services.AddHttpContextAccessor();

步骤2:在组件中注入并遍历

在Blazor组件中注入IHttpContextAccessor,然后从HttpContext中提取请求头、查询参数、服务器连接信息等(对应经典ASP的服务器变量):

@inject IHttpContextAccessor HttpContextAccessor
@using System.Linq

<h3>服务器变量列表</h3>
@foreach (var item in ServerVariables)
{
    <p>@item</p>
}

@code {
    private List<string> ServerVariables { get; set; } = new List<string>();

    protected override void OnInitialized()
    {
        var httpContext = HttpContextAccessor.HttpContext;
        if (httpContext == null) return;

        // 遍历请求头(对应经典ASP中HTTP_开头的服务器变量)
        foreach (var header in httpContext.Request.Headers)
        {
            ServerVariables.Add($"{header.Key} = {header.Value}");
        }

        // 遍历查询字符串参数
        foreach (var query in httpContext.Request.Query)
        {
            ServerVariables.Add($"QUERY_{query.Key} = {query.Value}");
        }

        // 补充服务器/客户端基础信息
        ServerVariables.Add($"SERVER_NAME = {httpContext.Request.Host.Host}");
        ServerVariables.Add($"SERVER_PORT = {httpContext.Request.Host.Port ?? 80}");
        ServerVariables.Add($"REMOTE_ADDR = {httpContext.Connection.RemoteIpAddress?.ToString()}");
    }
}

二、遍历会话变量

Blazor Server中使用Session需要先配置会话服务,再通过HttpContext.Session遍历。

步骤1:配置Session服务

在Program.cs中添加Session配置:

// 添加Session服务
builder.Services.AddSession(options =>
{
    options.IdleTimeout = TimeSpan.FromMinutes(30);
    options.Cookie.HttpOnly = true;
    options.Cookie.IsEssential = true;
});

// 启用Session(需放在UseRouting之后,UseAuthorization之前)
app.UseSession();

步骤2:在组件中注入并遍历

同样通过IHttpContextAccessor获取HttpContext,再遍历Session的键值对:

@inject IHttpContextAccessor HttpContextAccessor
@using System.Linq

<h3>会话变量列表</h3>
@foreach (var key in HttpContextAccessor.HttpContext?.Session.Keys ?? Enumerable.Empty<string>())
{
    <p>@key = @HttpContextAccessor.HttpContext.Session.GetString(key)</p>
}

@code {
    protected override void OnInitialized()
    {
        var session = HttpContextAccessor.HttpContext?.Session;
        if (session == null) return;

        // 在代码逻辑中遍历会话变量
        foreach (var key in session.Keys)
        {
            var value = session.GetString(key);
            // 自定义处理逻辑
        }
    }
}

注意事项

Blazor Server基于SignalR通信,HttpContext仅在初始页面请求时可用,后续SignalR交互过程中HttpContext会为null。如果需要在后续操作中使用服务器/会话变量,建议在组件初始化时将所需数据保存到本地变量中。

内容的提问来源于stack exchange,提问作者Andres

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 18:55:35