Próbuję dowiedzieć się właściwy sposób modyfikowania URL (-y), który nasłuchuje na pustułka z konstruktora klasy Uruchomienie.Jak skonfigurować adresy Kestrel w klasie startowej
Aktualizacja: Oprócz odpowiedzi poniżej zrozumiałem, że klasa Startup nie służy do konfiguracji Kestrel w sposób, w jaki myślałem. Myślałem, że Startup utworzyłby pojedynczy obiekt konfiguracyjny dla całej aplikacji, który byłby zlokalizowany przez konwencję, tak nie jest. Jak wskazuje @Tena, konfiguracja aplikacji i hostingu to osobny problem. Połączona odpowiedź i zaakceptowana odpowiedź dostarczają przykładów roboczych.
Obróciłem się zupełnie nowe Ubuntu 14 skrzynki w Vagrant i zainstalowany ASP.NET Core 1.1, zgodnie z obowiązującymi instrukcjami Microsoft: https://www.microsoft.com/net/core#linuxubuntu
wpadłem:
- dotnet nowego -t web
- DotNet przywrócić
- prowadzony DotNet
Ta funkcja domyślnie nasłuchuje na http://localhost:5000. W Program.cs mogę wywołać app.UseUrls ("http: // *: 5001) i to działa, aby zmienić adres URL i port."
Naprawdę chcę zmienić adresy URL zgodnie z konwencją, dodając nowy JSON ustawienie pliku startowego w klasie, więc po przykłady i utworzony plik hosting.JSON z tym (uwaga: próbowałem „server.urls” i „adres URL” jako klucz).
{
urls: "http://*:5001"
}
przy starcie .cs poniżej domyślnych linii dodawania plików appsettings.json dodałem .AddJsonFile ("hosting.json", opcjonalnie: false); (opcjonalnie: false, aby upewnić się, że podniósł plik)
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddJsonFile("hosting.json", optional: false);
if (env.IsDevelopment())
{
// For more details on using the user secret store see https://go.microsoft.com/fwlink/?LinkID=532709
builder.AddUserSecrets();
}
builder.AddEnvironmentVariables();
Configuration = builder.Build();
}
I sprawdzeniu, że ustawienie jest tam po konfiguracja buduje, ale to nie jest odbierane lub używane, gdy komputer jest zbudowany w Program.cs
public class Program
{
public static void Main(string[] args)
{
var host = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
host.Run();
}
}
a aplikacja ciągle zaczyna słuchać na localhost: 5000. Jest to moje (prawdopodobnie błędne) zrozumienie, że poprzez ustawienie odpowiednio nazwane z odpowiednim kluczem WebHostBuidler powinien go podnieść i użyć.
Widziałem inne przykłady, które w zasadzie pozbyć klasie startowej i utworzyć konfigurację w Program.cs gdzie mogą być następnie przekazany do wywołania UseConfiguration ale znowu mi się, że za pomocą klasy startowy powinien Zrób to według konwencji.
Zasadniczo Chciałbym zachować Uruchamianie i Programu oddzielić, dodać plik hosting.JSON do konfiguracji z adresami URL i go podniósł i wykorzystywane bez konieczności zadzwonić UseUrls, UseConfiguration, etc
Czy brakuje mi czegoś oczywistego lub próbuję zrobić coś, co nie jest poprawne?
Aby wyjaśnić, dlaczego to nie jest duplikatem, jak na mój komentarz:
To zakładać specjalnie mówi "launcherSettings jest dla Visual Studio F5". Używam wiersza poleceń w systemie Linux. Nic wspólnego z VS.
Rozwiązanie dostarczone w tym poście przeniosło konfigurację konfiguracji do głównej metody. Mówię konkretnie, że chcę zbudować moją konfigurację w klasie Startup, tak jak domyślny projekt "dotnet new -t web".
Nie czuję to jest duplikatem, a ja nadal przeglądając źródła ASP.NET Core sprawdzić, czy jest to możliwe.
W odniesieniu do prawidłowego klucza:
namespace Microsoft.AspNetCore.Hosting
{
public static class WebHostDefaults
{
public static readonly string ApplicationKey = "applicationName";
public static readonly string StartupAssemblyKey = "startupAssembly";
public static readonly string DetailedErrorsKey = "detailedErrors";
public static readonly string EnvironmentKey = "environment";
public static readonly string WebRootKey = "webroot";
public static readonly string CaptureStartupErrorsKey = "captureStartupErrors";
public static readonly string ServerUrlsKey = "urls";
public static readonly string ContentRootKey = "contentRoot";
}
}
public class WebHost : IWebHost
{
private static readonly string DeprecatedServerUrlsKey = "server.urls";
Możliwy duplikat [Nie można ustawić port dla aplikacji Net.Core w launchSettings.JSON] (http://stackoverflow.com/questions/40550798/cant-set-the-port-for -net-core-application-in-launchsettings-json) – Tseng
Poprawny ciąg jest btw. 'server.urls', ale nie jestem już pewien, czy to będzie działać w starcie i jeśli jest już za późno. Z połączonym jeden zadziała na pewno (czytając hosting w głównej metodzie i przekazuje go do budowniczego) – Tseng
Przeczytaj odpowiedź, obejmuje dokładnie to samo i zajmuje się ustawianiem portu dla pustułki. Plakat był początkowo zdezorientowany przez wyrzutnię Ustawienia – Tseng