DotNet Blazor WASM读取本地SQL数据库后加载卡住问题求助
问题
我是DotNet新手,测试连接本地SQL数据库时,连接成功且能读取数据,但浏览器中的应用卡在加载状态,无任何错误或异常抛出。注释的代码块会导致应用加载失败——执行这段注释代码时,控制台能成功获取数据库数据,但浏览器应用会卡住且无报错。
完整Program.cs代码:
global using BlazorShop.Shared; using Microsoft.AspNetCore.ResponseCompression; using Microsoft.Data.SqlClient; using Microsoft.EntityFrameworkCore; WebApplicationBuilder builder = WebApplication.CreateBuilder( args ); /*try { var sqlBuilder = new SqlConnectionStringBuilder { ConnectionString = builder.Configuration.GetConnectionString( "DefaultConnection" ) }; using var connection = new SqlConnection( sqlBuilder.ConnectionString ); Console.WriteLine( "\nQuery data example:" ); Console.WriteLine( "=========================================\n" ); const string sql = "SELECT name, collation_name FROM sys.databases"; using var command = new SqlCommand( sql, connection ); connection.Open(); using SqlDataReader reader = command.ExecuteReader(); while ( reader.Read() ) { Console.WriteLine( "{0} {1}", reader.GetString( 0 ), reader.GetString( 1 ) ); } reader.Close(); connection.Close(); } catch ( SqlException e ) { Console.WriteLine( e.ToString() + "vregfqrevcqersgvcrqedsvcqedsvcerdsverqvrqesgvreqsdbvrqe" ); } Console.ReadLine();*/ // Add services to the container. builder.Services.AddControllersWithViews(); builder.Services.AddRazorPages(); WebApplication app = builder.Build(); // Configure the HTTP request pipeline. if ( app.Environment.IsDevelopment() ) { //app.UseWebAssemblyDebugging(); } else { app.UseExceptionHandler( "/Error" ); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } app.UseHttpsRedirection(); app.UseBlazorFrameworkFiles(); app.UseStaticFiles(); app.UseRouting(); app.MapRazorPages(); app.MapControllers(); app.MapFallbackToFile("index.html"); app.Run();
问题原因
核心问题出在注释代码中的Console.ReadLine();——这行代码会阻塞ASP.NET Core应用的启动主线程。在Program.cs的构建阶段调用它,应用会一直等待控制台输入,无法继续完成后续的中间件配置和服务启动,导致浏览器请求永远得不到响应,表现为页面卡住加载。
解决方案
直接移除
Console.ReadLine();
去掉这行代码后,应用启动流程不会被阻塞,能正常完成初始化,浏览器即可正常加载页面。保留数据库测试逻辑但不阻塞启动(可选)
如果需要在启动时执行数据库测试,可将这部分逻辑放到应用启动后的异步任务中,避免阻塞主线程。修改后的代码示例:
global using BlazorShop.Shared; using Microsoft.AspNetCore.ResponseCompression; using Microsoft.Data.SqlClient; using Microsoft.EntityFrameworkCore; WebApplicationBuilder builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllersWithViews(); builder.Services.AddRazorPages(); WebApplication app = builder.Build(); // 后台异步执行数据库测试,不阻塞启动 _ = Task.Run(async () => { try { var sqlBuilder = new SqlConnectionStringBuilder { ConnectionString = app.Configuration.GetConnectionString("DefaultConnection") }; using var connection = new SqlConnection(sqlBuilder.ConnectionString); Console.WriteLine("\nQuery data example:"); Console.WriteLine("=========================================\n"); const string sql = "SELECT name, collation_name FROM sys.databases"; using var command = new SqlCommand(sql, connection); await connection.OpenAsync(); using SqlDataReader reader = await command.ExecuteReaderAsync(); while (await reader.ReadAsync()) { Console.WriteLine("{0} {1}", reader.GetString(0), reader.GetString(1)); } } catch (SqlException e) { Console.WriteLine(e.ToString() + "vregfqrevcqersgvcrqedsvcqedsvcerdsverqvrqesgvreqsdbvrqe"); } }); // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { //app.UseWebAssemblyDebugging(); } else { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseBlazorFrameworkFiles(); app.UseStaticFiles(); app.UseRouting(); app.MapRazorPages(); app.MapControllers(); app.MapFallbackToFile("index.html"); app.Run();
这样修改后,数据库测试会在后台独立执行,应用启动流程不受影响,浏览器能正常加载页面,同时控制台依然能输出数据库查询结果。
内容的提问来源于stack exchange,提问作者Tree3708
相关产品推荐
相关产品推荐

