IIS Express возиться с HTTP Status на исключение - PullRequest
0 голосов
/ 22 декабря 2018

У меня есть приложение ASP.NET Core 2.1 REST API.Я хочу иметь возможность запускать его как службу Windows, а также на IIS, поэтому я создал проект запуска для каждого из них, и они используют общую библиотеку Core для «кишок» приложения.Я использую CORS, который, я думаю, может вступить в игру.

Проект службы обычно выполняется под dotnet.exe из Visual Studio, а проект IIS выполняется с использованием IIS Express из Visual Studio.Их код запуска очень мало отличается и находится в конце этого поста.

Как и большинство остальных API, я хочу полагаться на коды статуса Http для передачи информации.На одной конечной точке я хочу использовать RequestSizeLimitAttribute для возврата статуса 413, если запрос превышает определенный лимит.

Проект службы Windows работает правильно, возвращая правильные коды состояния клиенту.Но когда я работаю как IIS Express, клиент сначала отправляет запрос OPTIONS и возвращает 204 (как и ожидалось), но затем ответом всегда является шлюз 502.

Взаимодействует ли IIS с вещамиесли происходит исключение из-за RequestSizeLimitAttribute?

//IIS Express Project Startup Code
public static void Main(string[] args)
{
    BuildWebHost(args).Run();
}

public static IConfiguration config => new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
        .AddJsonFile("appsettings.Development.json", optional: true)
        .Build();

public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
        .UseConfiguration(config)
        .UseStartup<Startup>()
        .Build();

AND

 //Windows Service startup code
 public static IConfiguration config => new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
        .AddJsonFile("appsettings.Development.json", optional: true)
        .Build();

 public static void Main(string[] args)
 {
     RunWebHost(args, logger);
 }

 public static void RunWebHost(string[] args)
 {
     var isService = true;

     if (Debugger.IsAttached || args.Contains("--console"))
     {
         isService = false;
     }

     var pathToContentRoot = Directory.GetCurrentDirectory();

     if (isService)
     {
        var pathToExe = Process.GetCurrentProcess().MainModule.FileName;
        pathToContentRoot = Path.GetDirectoryName(pathToExe);
     }

     var webHostArgs = args.Where(arg => arg != "--console").ToArray();

     var host = WebHost.CreateDefaultBuilder(webHostArgs)
            .UseContentRoot(pathToContentRoot)
            .UseConfiguration(config)
            .UseStartup<Startup>()
            .Build();

        if (isService)
        {
            host.RunAsService();
        }
        else
        {
            host.Run();
        }
 }
...