ASP.NET core web api возвращает 404, когда Startup.cs в другой сборке - PullRequest
1 голос
/ 17 марта 2019

У меня есть .net core web API, и когда я изолировал Startup.cs в другой сборке, все API возвращают 404, и если я возвращаю Startup.cs обратно в ту же сборку, где контроллерысуществуют, они снова работают.

Вот мой Program.cs моего веб-API:

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

1 Ответ

4 голосов
/ 17 марта 2019

Замените .UseStartup на следующие строки:

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

Где Application.AppComponents.Startup - это пространство имен вашего файла запуска в библиотеке классов.

...