Blazor页面短暂显示数据后出现“Not found”问题求助
问题分析与解决方案
你遇到的页面短暂显示数据后跳转至「Not found」的问题,核心可能是路由冲突、数据绑定依赖失效或全局中间件/错误处理配置异常,以下是针对性的排查与修复步骤:
1. 修正组件数据绑定逻辑
你的代码中QuickGrid直接绑定了_context?.Clinica(DbContext的DbSet),但DbContext会在组件销毁时被释放,后续组件重新渲染时会因DbSet失效触发异常,进而可能触发错误导航。改为使用已加载到内存的_clinicas列表:
@page "/clinicas" @using Atena.Data @using Atena.Models @using Microsoft.AspNetCore.Components.QuickGrid @using Microsoft.EntityFrameworkCore @implements IAsyncDisposable @inject IDbContextFactory<ApplicationDbContext> DbFactory <PageTitle>Clínicas</PageTitle> <h1>Clínicas</h1> <!-- 改为绑定已加载的内存列表 --> <QuickGrid Class="table" Items="_clinicas"> <PropertyColumn Property="clinica => clinica.Email"/> <PropertyColumn Property="clinica => clinica.Fantasia"/> <PropertyColumn Property="clinica => clinica.Cep"/> <PropertyColumn Property="clinica => clinica.Endereco"/> </QuickGrid> @code { private ApplicationDbContext? _context = null!; private List<Clinica>? _clinicas; protected override async Task OnInitializedAsync() { _context = await DbFactory.CreateDbContextAsync(); _clinicas = await _context.Clinica.ToListAsync(); } public async ValueTask DisposeAsync() { if (_context is not null) { await _context.DisposeAsync(); } } }
2. 排查路由配置问题
- 检查路由冲突:搜索整个解决方案中所有
@page指令,确保没有其他页面使用/clinicas路由。 - 确认路由注册顺序:打开
Program.cs,确保组件路由注册在正确位置,且无错误重定向规则:app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); // 组件路由注册应在授权之后 app.MapRazorComponents<App>() .AddInteractiveServerRenderMode() .AddInteractiveWebAssemblyRenderMode() .AddInteractiveAutoRenderMode(); // 避免错误的全局 fallback 规则,确保仅在真正404时触发 // 错误示例:app.MapFallbackToPage("/NotFound");
3. 检查网络请求与异常
- 打开浏览器开发者工具(F12),切换到「网络」标签,刷新页面查看所有请求的状态码,确认是否有API请求或静态资源返回404,导致页面跳转。
- 切换到「控制台」标签,查看是否有未捕获的异常,异常可能触发框架自动导航至错误页面。
4. 验证错误处理配置
如果使用了异常处理中间件,确认错误页面路由正确,不会错误跳转到NotFound:
// 确保/Error页面存在且路由配置正确 app.UseExceptionHandler("/Error");
内容的提问来源于stack exchange,提问作者Sergio Di Fiore
相关产品推荐
相关产品推荐

