ASP.NET Core 2.2 Web API выдает 404 после размещения на IIS - PullRequest
1 голос
/ 28 мая 2019

Я создал проект ASP.Net Core 2.2 Web Api, и он работает локально без каких-либо проблем. После того, как я публикую его в файловой системе, он всегда дает мне 404 проблему. Я включил выборки окон, связанные с IIS и приложениями ASP.NET Framework web api2, которые хорошо работают на одном сервере.

Я включил документацию по swagger и использовал библиотеки Microsoft.AspNetCore.Authentication.

Program.cs

using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;

namespace US.BOX.AuthAPI
{
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateWebHostBuilder(args).Build().Run();
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>();
    }
}

Startup.cs

using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using US.BOX.AuthAPI.Extensions;

namespace US.BOX.AuthAPI
{
    public class Startup
    {
        private readonly IConfiguration _configuration;
        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.Configure<IISOptions>(options =>
            {
                options.ForwardClientCertificate = false;
            });

            services.Configure<ApiBehaviorOptions>(options =>
            {
                options.SuppressModelStateInvalidFilter = true;
            });

            services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
            services.AddSingleton<IAuthenticationSchemeProvider, CustomAuthenticationSchemeProvider>();

            services.AddSwaggerDocumentation();
            services.AddJwtBearerAuthentication(_configuration);

            services.AddCors();
            services.AddLogging();

            services.AddMvc()
                .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

        }

        // 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, ILogger<Startup> logger)
        {
            app.UseAuthentication();

            if (env.IsDevelopment())
            {
                app.UseSwaggerDocumentation();
            }
            else
            {
                app.UseHsts();
            }

            app.UseHttpsRedirection();
            app.UseMvc();
        }
    }
}

appsettings.json

{
  "JWT": {
    // TODO: This should be updated for production deployment
    "SecurityKey": "sDIkdjhkalUthsaCVjsdfiskokrge",
    "Issuer": "https://{host_name}:{port}",
    "Audience": "https://{host_name}:{port}",
    "ExpirationTimeInMinutes": 60
  },
  "Logging": {
    "LogFilePath": "Logs/auth-{Date}.txt",
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "AllowedHosts": "*"
}

UsersController.cs

using System;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;

namespace US.BOX.AuthAPI.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class UsersController : ControllerBase
    {
        [HttpGet]
        public IActionResult GetAll()
        {
            try
            {
                return Ok("Users");
            }
            catch (Exception)
            {

                throw;
            }
        }
    }
}

После публикации он генерирует следующий web.config file

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath="dotnet" arguments=".\US.BOX.AuthAPI.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="InProcess" />
    </system.webServer>
  </location>
</configuration>

Ответы [ 2 ]

2 голосов
/ 28 мая 2019

ниже приведены некоторые контрольные списки, которые вы можете проверить, если вы это сделали.

  1. Установите windows-hosting-bundle-installer для вашей версии ядра dotnet для вашей ОС. Вы можете скачать его по ссылке
  2. Создайте новый пул приложений в IIS для ядра dotnet, вы можете проверить следующие изображения для настроек enter image description here
  3. Настройте любое приложение, связанное с ядром dotnet, на вновь созданный пул приложений для всего хостинга.

посмотрите, решает ли вышеуказанное проблему. вернуться к любым запросам голосовать и нравится, если ваша проблема решена, чтобы она могла кому-то помочь.

1 голос
/ 11 июля 2019

Надеюсь, это кому-нибудь поможет.Ниже приведены шаги, которые я предпринял для решения этой проблемы.

  1. Включить IIS Hosted Web Core

    enter image description here

  2. Установить 'Распространяемый Visual C ++ для Visual Studio 2015'

    https://www.microsoft.com/en-us/download/details.aspx?id=48145

  3. Установить 'dotnet-hosting-2.2.6-win.exe '

    https://dotnet.microsoft.com/download

  4. Создание отдельного пула приложений IIS с «No Manage Code» в .NET CLR версии

    enter image description here

** Обратите внимание, порядок выполнения вышеуказанных шагов очень важен

...