Конфигурация Kestrel для использования определенного порта + URL

Я использую Asp.Net core 2.0.2 на Win 7 с VS2017 (15.3.5).

Моя текущая конфигурация Kestrel выглядит так:

return WebHost.CreateDefaultBuilder(args)
    .UseStartup<Startup>()
    .ConfigureAppConfiguration((hostContext, config) =>
    {
        var envName = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");

        config.Sources.Clear();
        config.AddJsonFile("appsettings.json", optional : false);
        config.AddJsonFile($"appsettings.{envName}.json", optional : false);
        config.AddEnvironmentVariables();
    })
    .UseKestrel(options =>
    {
        options.Listen(IPAddress.Loopback, 5859);
    })
    .UseContentRoot(pathToContentRoot)
    .Build();

Очевидно, это слушает http://localhost:5859. Я хочу настроить Kestrel так, чтобы он слушал ТОЛЬКО настраиваемый URL-адрес, например http://localhost:5859/MyNewApp. Как мне это сделать?

(В Core 1.0 я использовал UseUrls("http://localhost:5859/MyNewApp"), который частично выполнил эту работу. Он будет прослушивать как http://localhost:5859, так и http://localhost:5859/MyNewApp. То же самое в Core 2.0.2 приводит к исключению:

System.InvalidOperationException: базу пути можно настроить только с помощью IApplicationBuilder.UsePathBase ())


person Vikram    schedule 13.02.2018    source источник


Ответы (1)


В версии 2.0 вам необходимо использовать UsePathBase, поскольку UseUrls был удален из Kestrel. Вы захотите сделать это в своем Configure методе при запуске:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UsePathBase("/MyNewApp"); 
}
person Marc LaFleur    schedule 13.02.2018
comment
Спасибо, все отлично работает! Есть ли способ запретить приложению работать на localhost: 5859? В настоящее время работают как localhost: 5859, так и localhost: 5859 / MyNewApp. - person Vikram; 14.02.2018
comment
Kestel - это скорее сервер приложений, чем полноценный веб-сервер. Как правило, вы используете полнофункциональный веб-сервер, такой как IIS или Apache, чтобы находиться между Интернетом и вашим приложением и прокси-сервером входящих вызовов. В этом сообщении есть хорошее объяснение того, как это работает и почему это хорошо: stackify.com/kestrel-web-server-asp-net-core-kestrel-vs-iis - person Marc LaFleur; 14.02.2018