MudBlazor WASM托管项目服务端分页报错:指定标头未找到
问题分析与解决方案
错误直接指向response.Headers.GetValues("X-Pagination").First(),核心原因是响应中不存在名为X-Pagination的自定义头,或者客户端无权读取这个头,以下是具体排查和修复步骤:
1. 检查服务端是否正确返回X-Pagination头
服务端必须在分页接口中,将分页元数据(MetaData)序列化为JSON后,添加到响应头中。示例代码如下:
public async Task<IActionResult> GetUserTables([FromQuery] Parameters parameters) { var pagedResult = await _userTableService.GetPagedData(parameters); // 序列化分页元数据 var metaJson = JsonSerializer.Serialize(pagedResult.MetaData); // 添加自定义响应头 Response.Headers.Add("X-Pagination", metaJson); return Ok(pagedResult.Items); }
2. 配置CORS暴露自定义头(关键)
由于WASM是跨域请求,服务端必须显式配置CORS,允许客户端读取X-Pagination头。在.NET 6+的Program.cs中添加:
builder.Services.AddCors(options => { options.AddPolicy("WasmCorsPolicy", policy => { policy.WithOrigins("你的WASM客户端域名,例如http://localhost:5000") .AllowAnyMethod() .AllowAnyHeader() .WithExposedHeaders("X-Pagination"); // 必须暴露这个自定义头 }); }); // 启用CORS app.UseCors("WasmCorsPolicy");
3. 客户端代码增加容错处理
避免因头不存在直接崩溃,修改客户端获取元数据的代码:
// 替换原来的metaData获取逻辑 MetaData metaData = null; if (response.Headers.TryGetValues("X-Pagination", out var headerValues)) { var paginationHeader = headerValues.FirstOrDefault(); if (!string.IsNullOrEmpty(paginationHeader)) { metaData = JsonSerializer.Deserialize<MetaData>(paginationHeader, _options); } } var pagingResponse = new PagingResponse<UserTable> { Items = await JsonSerializer.DeserializeAsync<List<UserTable>>(stream, _options), MetaData = metaData ?? new MetaData() // 兜底空元数据,避免空引用 };
内容的提问来源于stack exchange,提问作者ani H
相关产品推荐
相关产品推荐

