2016-10-05 2 views
9

Как получить базовый URL-адрес в основном приложении AspNet без запроса?Как получить базовый url без доступа к запросу

Я знаю, что из запроса вы можете получить схему и хост (т.е. $"{Request.Scheme}//{Request.Host}" даст что-то вроде https://localhost:5000), но можно ли получить эту информацию из другого места?

Другими словами, если у меня есть класс обслуживания, который должен создавать абсолютные URL-адреса, как я могу получить текущий URL-адрес, если нет HTTP-запроса?

UPDATE: Возможно, что сценарий даже не имеет смысла, так как хостинг URL является полностью внешним по отношению к приложению, и именно поэтому она имеет смысл только, чтобы извлечь его из хоста запроса ..

+1

Только быстрое примечание, что в AspNetCore есть услуга, которая может быть введена в любой класс, чтобы получить базовый url из текущего запроса (в случае, если мы не находимся в контроллере с прямым доступом к Request). Просто вставляя «IHttpContextAccessor contextAccessor», а затем создавая «var url = $» {contextAccessor.HttpContext.Request.Scheme}: // {contextAccessor.HttpContext.Request.Host.ToUriComponent()} ";' Но как на https://github.com/aspnet/Hosting/issues/793, кажется, необходимо будет явно зарегистрировать его в DI: 'services.AddSingleton ();' – iberodev

ответ

5

Вы правы, хостинг URL это внешняя информация, и вы можете просто передать ее в качестве параметра конфигурации в ваше приложение.

Возможно, это поможет вам как-либо: без запроса вы можете получить настроенный адрес прослушивания (например, http://+:5000) с использованием интерфейса IWebHostBuilder. Он обеспечивает доступ к настройкам хоста с помощью метода 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); 

Существует WebHostDefaults.ServerUrlsKey установки имени, что позволяет настроить прослушивание адреса. Мы переопределить его, когда добавить .UseUrls метод расширения:

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

или определить urls параметр конфигурации, как описано в the documentation (вы знаете, по умолчанию прослушивания настроен на localhost:5000).

Итак, имея экземпляр IWebHostBuilder, вы можете позвонить .GetSetting(WebHostDefaults.ServerUrlsKey) и получить текущее значение.

5

мне нужно для какой-либо причине, чтобы получить базовый URL в Start.cs Настройка, поэтому я пришел с этим

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

+1

Это работает только при отладке с использованием VS. В IIS Express и IIS он возвращает случайный номер порта. – Whoever

Смежные вопросы