Skip to main content
 首页 » 编程设计

c#之当不同程序集中的 Startup.cs 时,ASP.NET Core Web API 返回 404

2024年01月29日27落叶

我有 .net 核心 Web API,当我在不同的程序集中隔离 Startup.cs 时,所有 API 都返回 404,如果我将 Startup.cs 返回到同一个程序集在 Controller 存在的地方,它们再次工作。

这是我的 Web API 的 Program.cs:

public class Program 
{ 
    public static void Main(string[] args) 
    { 
      CreateWebHostBuilder(args).Build().Run(); 
    } 
 
    public static IWebHostBuilder CreateWebHostBuilder(string[] args) => 
      WebHost.CreateDefaultBuilder(args) 
       .UseStartup<Startup>() 
       .ConfigureAppConfiguration((hostContext, configApp) => 
       { 
           configApp.SetBasePath(Directory.GetCurrentDirectory()); 
           configApp.AddJsonFile("appsettings.json", false, true); 
           configApp.AddJsonFile($"appsettings.{hostContext.HostingEnvironment.EnvironmentName}.json", false, true); 
       }); 
} 

还有我的 Startup.cs:

public class Startup 
{ 
    public Startup(IConfiguration configuration) 
    { 
        Configuration = configuration; 
    } 
 
    public IConfiguration Configuration { get; } 
 
    public void ConfigureServices(IServiceCollection services) 
    { 
 
        services.AddMvc() 
                .SetCompatibilityVersion(CompatibilityVersion.Version_2_2) 
                .AddDataAnnotationsLocalization(options => 
                { 
                    options.DataAnnotationLocalizerProvider = (type, factory) => 
                        factory.Create(typeof(ValidationMessages)); 
                }); 
    } 
 
 
    public void Configure(IApplicationBuilder app, IHostingEnvironment env) 
    { 
 
        if (env.IsDevelopment()) 
        { 
            app.UseDeveloperExceptionPage(); 
        } 
 
        app.UseMvc(); 
    } 
} 

所以我需要将启动类放在不同的程序集中,然后在多个 Web API 项目中使用它

请您参考如下方法:

将 .UseStartup 替换为以下行:

.UseStartup<Application.AppComponents.Startup>()  
.UseSetting(WebHostDefaults.ApplicationKey, typeof(Program).GetTypeInfo().Assembly.FullName) 

其中 Application.AppComponents.Startup 是您的启动文件在类库中的命名空间。