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
相关产品推荐
相关产品推荐

