Не удается запустить API Asp Net Core на IIS - PullRequest
0 голосов
/ 13 июня 2019

У меня есть asp net core web api.

Я могу запустить его с помощью команды dotnet , он запускается на https://localhost:5001/ (как и должно быть), и все работает нормально.

Но когда я пытаюсь запустить API, используя IIS Express или IIS , он не достигает страницы и выдает мне ошибка 500.30 :

Browser error

Я включил logs в web.config, и это результат:

Исключение при запуске приложения: System.InvalidOperationException: приложение работает внутри процесса IIS, но не настроено на использование сервера IIS.в Microsoft.AspNetCore.Server.IIS.Core.IISServerSetupFilter. <> c__DisplayClass2_0.b__0 (приложение IApplicationBuilder) в Microsoft.AspNetCore.HostFilteringStartupFilter. <> c__DisplayClass0_splication.artup.Hort.Inter.File.Fu.Inter.Fit.> c__DisplayClass0_0.b__0 (сборщик IApplicationBuilder) в Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication () crit: Microsoft.AspNetCore.Hosting.Internal.WebHost [6] Исключение при запуске приложения System.InvalidOperationException: приложение выполняется внутри Iне настроен на использование сервера IIS.в Microsoft.AspNetCore.Server.IIS.Core.IISServerSetupFilter. <> c__DisplayClass2_0.b__0 (приложение IApplicationBuilder) в Microsoft.AspNetCore.HostFilteringStartupFilter. <> c__DisplayClass0_splication.artup.Hort.Inter.File.Fu.Inter.Fit.> c__DisplayClass0_0.b__0 (сборщик IApplicationBuilder) в Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication () Хостинговая среда: корневой путь к производственному контенту: D: _APICore Сейчас прослушивается: http://localhost:5000 Приложение запущено.Нажмите Ctrl + C, чтобы выключить.

Тогда у меня ошибка в Просмотр событий тоже (по-итальянски): Event viewer error

Наконец, это Program.cs :

public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseStartup<Startup>();

Надеюсь, что вся эта информация поможет.Спасибо за любую помощь.

ОБНОВЛЕНИЕ

StartUp.cs :

public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

        //Authorization settings
        services.AddCors(c => c.AddPolicy("Permissions", builder => {
            builder.AllowAnyOrigin()
                   .AllowAnyMethod()
                   .AllowAnyHeader();
        }));
        services.Configure<MvcOptions>(options =>
        {
            options.Filters.Add(new CorsAuthorizationFilterFactory("Permissions"));
        });

        services.Configure<Values>(Configuration.GetSection("StoredValues"));

        //JWT setting configuration
        var appSettings = Configuration.GetSection("StoredValues");
        var key = appSettings.GetValue(typeof(string), "JWTSecret").ToString();
        services.AddAuthentication(x =>
        {
            x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
            x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
        })
        .AddJwtBearer(x =>
        {
            x.RequireHttpsMetadata = false;
            x.SaveToken = true;
            x.TokenValidationParameters = new TokenValidationParameters
            {
                ValidateIssuerSigningKey = true,
                IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(key)),
                ValidateIssuer = false,
                ValidateAudience = false
            };
        });

    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
            app.UseHsts();
        }

        loggerFactory.AddLog4Net();

        app.UseHttpsRedirection();
        app.UseMvc();
        app.UseCors("Permissions");
        app.UseAuthentication();
        app.UseDefaultFiles();
        app.UseStaticFiles();
    }

ОБНОВЛЕНИЕ 2

Я нашел несколько старшеверсия программы, и они тоже не работают.

Так что теперь мне интересно, если это моя проблема или что-то еще ???

Может быть, какое-то обновление?Я действительно не знаю.

Ответы [ 2 ]

1 голос
/ 13 июня 2019

Я рекомендую вам вызвать ConfigureKestrel вместо UseKestrel:

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-2.2#how-to-use-kestrel-in-aspnet-core-apps

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .UseStartup<Startup>()
        .ConfigureKestrel((context, options) =>
        {
            // Set properties and call methods on options
        });
0 голосов
/ 13 июня 2019

Попробуйте удалить .UseKestrel()

Ссылка / дополнительная информация: Host RestAPI внутри IIS - перейдите по ссылке, указанной в ответе.Имейте в виду, что вам может потребоваться настроить дополнительные свойства, которые описаны в этой ссылке.

...