2015-01-29 30 views
6

Próbuję znaleźć URL żądania (domenę), a konkretnie po uruchomieniu aplikacji, w moim pliku Startup.cs ..Jak uzyskać adres URL żądania przy uruchamianiu aplikacji

public Startup(IHostingEnvironment env) 
{ 
    Configuration = new Configuration().AddEnvironmentVariables(); 
    string url = ""; 
} 

muszę go plik Startup.cs, ponieważ określi, które usługi przejściowe zostaną dodane później w klasie uruchamiania, w metodzie ConfigureServices.

Jaki jest prawidłowy sposób uzyskania tych informacji?

Odpowiedz

4

Niestety nie można pobrać hostującego adresu URL aplikacji, ponieważ bit ten jest kontrolowany przez IIS/WebListener itp. I nie przepływa bezpośrednio do aplikacji.

Dobrą alternatywą jest zapewnienie każdemu z serwerów zmiennej środowiskowej ASPNET_ENV, aby następnie oddzielić swoją logikę. Oto kilka przykładów, w jaki sposób z niego korzystać:

Startup.cs:

public class Startup 
{ 
    public void Configure(IApplicationBuilder app) 
    { 
     // Will only get called if there's no method that is named Configure{ASPNET_ENV}. 
    } 

    public void ConfigureDev(IApplicationBuilder app) 
    { 
     // Will get called when ASPNET_ENV=Dev 
    } 
} 

Oto kolejny przykład, gdy ASPNET_ENV = Dev i chcemy zrobić separację klasy zamiast metody separacji:

Startup.cs:

public class Startup 
{ 
    public void Configure(IApplicationBuilder app) 
    { 
     // Wont get called. 
    } 

    public void ConfigureDev(IApplicationBuilder app) 
    { 
     // Wont get called 
    } 
} 

StartupDev.cs

public class StartupDev // Note the "Dev" suffix 
{ 
    public void Configure(IApplicationBuilder app) 
    { 
     // Would only get called if ConfigureDev didn't exist. 
    } 

    public void ConfigureDev(IApplicationBuilder app) 
    { 
     // Will get called. 
    } 
} 

nadzieję, że to pomaga.

+0

Dziękuję za odpowiedź. Jest to pomocne (choć rozczarowujące), ale postanowiłem wybrać inną trasę dla mojego problemu. –

+1

lub trzymaj się jednej metody "Configure" i po prostu sprawdź wartość 'env.EnvironmentName' z dobrym starym stwierdzeniem jeśli: –

1

nie daje domenę, ale może pomóc, jeśli jesteś po prostu działa na porcie i potrzebują dostępu do tego:

 var url = app.ServerFeatures.Get<Microsoft.AspNetCore.Hosting.Server.Features.IServerAddressesFeature>().Addresses.Single(); 

Nie wiem, co się dzieje, gdy masz wiele adresów związanych.

+0

Co do tego, pamiętaj, że dla Azure (i wyobrażam sobie nie tylko), informacje lokalne są odzyskiwane, nie jest dostępna z zewnątrz. –

+0

@Simon_Weaver to już nie działa w asp.net core 2.xx. Walcząc z dowolnym innym sposobem uzyskania adresu hostingowego. Mam nadzieję, że dostanę adres URL hostingu: albo kestra lub IIS (np. Na dev będzie to coś w stylu http: // localhost: 5000 i prod będzie to jakakolwiek domena, którą ustawiliśmy, a IISIntegration ustawi ten URL) – Nexus23

+0

@ Nexus23 I ' Zrobiłem bardzo niewiele z rdzeniem, ale kiedy stanąłem przed tym problemem, myślę, że musiałem "oszukiwać" i umieszczać w konfiguracji to, co jest domeną zewnętrzną, aby odczytać samą konfigurację. Jestem pewien, że jest to również mądrzejszy sposób. –

Powiązane problemy