2016-10-05 13 views
9

Jak uzyskać podstawowy adres URL w głównej aplikacji AspNet bez żądania?Jak uzyskać adres URL bazy bez uzyskiwania dostępu do żądania

Wiem z wniosku, że można uzyskać schemat i hosta (np. $"{Request.Scheme}//{Request.Host}" dałoby coś w rodzaju https://localhost:5000), ale czy można uzyskać tę informację z dowolnego miejsca?

Innymi słowy, jeśli mam klasę usług, która musi tworzyć bezwzględne adresy URL, w jaki sposób mogę uzyskać bieżący adres URL, gdy nie ma dostępnego żądania http?

UPDATE: Być może, że scenariusz nie ma sensu, gdyż gospodarzem URL jest całkowicie zewnętrzny do aplikacji i dlatego ma sens tylko, aby wyodrębnić go z hosta żądanie ..

+1

tylko szybkie zauważyć, że w AspNetCore nie jest usługą, która może być wstrzykiwany w dowolna klasa, aby uzyskać podstawowy adres URL z bieżącego żądania (w przypadku, gdy nie znajdujemy się w kontrolerze mającym bezpośredni dostęp do żądania). Po prostu przez wstrzyknięcie 'IHttpContextAccessor contextAccessor', a następnie utworzenie ' var url = $ "{contextAccessor.HttpContext.Request.Scheme}: // {contextAccessor.HttpContext.Request.Host.ToUriComponent()}"; ' Ale jak na https://github.com/aspnet/Hosting/issues/793 wydaje się, że konieczne będzie jawne zarejestrowanie go w DI: 'services.AddSingleton ();' – iberodev

Odpowiedz

5

Masz rację, hosting URL jest zewnętrzną informacją i możesz po prostu przekazać ją jako parametr konfiguracyjny do swojej aplikacji.

Może to ci jakoś pomoże: bez żądania możesz uzyskać skonfigurowany adres nasłuchiwania (np. http://+:5000) przy użyciu interfejsu IWebHostBuilder. Zapewnia dostęp do ustawień gospodarza metodą GetSetting:

/// <summary> 
/// Get the setting value from the configuration. 
/// </summary> 
/// <param name="key">The key of the setting to look up.</param> 
/// <returns>The value the setting currently contains.</returns> 
string GetSetting(string key); 

Jest WebHostDefaults.ServerUrlsKey ustawienie nazwa, która pozwala skonfigurować słuchania adres. Możemy zastąpić go podczas dodawania .UseUrls metodę rozszerzenia:

public static IWebHostBuilder UseUrls(this IWebHostBuilder hostBuilder, params string[] urls); 

lub zdefiniować urls parametr konfiguracyjny jak to opisano w the documentation (wiesz, domyślnie jest skonfigurowany do słuchania localhost:5000).

Tak więc, mając instancję IWebHostBuilder, można zadzwonić pod numer .GetSetting(WebHostDefaults.ServerUrlsKey) i pobrać aktualną wartość.

5

potrzebowałem jakiegoś powodu, aby uzyskać adres URL bazowej w Start.cs Konfiguruj, więc wymyślić tego

var URLS = app.ServerFeatures.Get<IServerAddressesFeature>().Addresses;

+1

Działa to tylko podczas debugowania za pomocą VS. W obu usługach IIS Express i IIS zwraca losowy numer portu. – Whoever

Powiązane problemy