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

.NET5 Blazor WebAssembly项目添加Startup.cs及命名空间缺失问题咨询

Blazor WebAssembly .NET5 问题解决方案

1. Blazor WebAssembly 不存在 Startup.cs

Blazor WebAssembly(WASM)的启动模型和ASP.NET Core服务器端项目完全不同,不需要也不能使用Startup.cs。所有服务注册、配置逻辑都直接在Program.cs的Main方法中完成。你找不到IApplicationBuilder和IWebHostEnvironment是正常的——这两个类型属于ASP.NET Core服务器端的宿主基础设施,WASM运行在浏览器沙箱中,没有对应的实现。

2. EF Core 在 Blazor WebAssembly 中的错误用法

你当前尝试在WASM项目中直接用UseSqlServer连接SQL Server是不可行的:

  • SQL Server的.NET驱动依赖系统级网络能力,浏览器沙箱不允许直接建立数据库TCP连接。
  • 前端直接暴露数据库连接字符串会引发严重的安全风险。

正确方案:

  • 搭建ASP.NET Core后端API项目,在后端用EF Core连接SQL Server并提供数据接口。
  • Blazor WASM通过HttpClient调用后端API实现数据交互。

3. 修复 Program.cs 代码

你的Program.cs有两个关键错误:

  • 服务注册代码写在了await builder.Build().RunAsync()之后,此时宿主已构建完成,无法再添加服务。
  • 错误地在WASM中配置SQL Server类型的DbContext。

修改后的代码示例:

using System;
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
using Microsoft.Extensions.DependencyInjection;

namespace Mc2.CrudTest.Presentation.Front
{
    public class Program
    {
        public static async Task Main(string[] args)
        {
            WebAssemblyHostBuilder builder = WebAssemblyHostBuilder.CreateDefault(args);
            builder.RootComponents.Add<App>("#app");

            // 注册HttpClient,用于调用后端API(替换为你的实际后端地址)
            builder.Services.AddScoped(sp => new HttpClient 
            { 
                BaseAddress = new Uri("https://your-backend-api-domain/") 
            });

            // 若仅用于前端本地测试,可注册内存数据库(生产环境禁用)
            // builder.Services.AddDbContext<DataContext>(options =>
            //     options.UseInMemoryDatabase("LocalTestDb"));

            await builder.Build().RunAsync();
        }
    }
}

4. 调整 DataContext(仅用于前端测试场景)

如果只是做前端本地数据测试,可改用内存数据库适配WASM环境:

using Domain;
using Microsoft.EntityFrameworkCore;

namespace Mc2.CrudTest.Presentation.Front.Infrastructure
{
    public class DataContext : DbContext
    {
        public DataContext(DbContextOptions<DataContext> options) : base(options)
        {
        }

        public DbSet<Customer> Customers { get; set; }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 13:10:48