Wie man Basis-url ohne Zugriff auf eine Anfrage
Wie man die Basis-URL in AspNet-core-Anwendung, ohne eine Anfrage?
Ich weiß von der Anfrage erhalten Sie die Schema und host (dh $"{Request.Scheme}//{Request.Host}"
etwas geben würde wie https://localhost:5000), aber ist es möglich, diese Informationen zu bekommen von irgendwo sonst?
In anderen Worten, wenn ich eine service-Klasse, die braucht absolute URLs, wie kann ich die aktuelle URL, wenn es nicht eine http-Anforderung zur Verfügung?
UPDATE: Vielleicht ist das Szenario keinen Sinn, da die hosting-URL ist völlig außerhalb der Anwendung und deshalb macht es nur Sinn, Auszug aus dem Antrag host..
Nur eine kurze Notiz, dass in AspNetCore es ist ein Dienst, der injiziert werden können, in jede Klasse, um den Basis-url der aktuellen Anforderung (wenn wir uns nicht in einem controller mit direktem Zugang auf Anfrage). Einfach durch Einspritzen von
IHttpContextAccessor contextAccessor
und bauen dann die var url = $"{contextAccessor.HttpContext.Request.Scheme}://{contextAccessor.HttpContext.Request.Host.ToUriComponent()}";
Aber pro github.com/aspnet/Hosting/issues/793 es scheint, wird es notwendig sein, explizit zu registrieren es in DI: services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
InformationsquelleAutor iberodev | 2016-10-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie richtig, hosting-URL ist eine externe Informationen, und Sie können einfach vorbei kommen es als Konfigurations-parameter für Ihre Anwendung.
Vielleicht hilft es dir irgendwie: ohne Anforderung, können Sie eine konfigurierte Zuhören-Adresse (wie
http://+:5000
) mit dem IWebHostBuilder - Schnittstelle. Es ermöglicht den Zugriff auf host-Einstellungen über dieGetSetting
Methode:Es ist ein WebHostDefaults.ServerUrlsKey name der Einstellung, die es erlaubt zu konfigurieren, Zuhören-Adresse. Wir überschreiben, wenn Sie
.UseUrls
extension Methode:oder definieren
urls
- Konfiguration parameter wie beschrieben in die Dokumentation (Sie wissen, standardmäßig hören konfiguriert ist, umlocalhost:5000
).So, dass die Instanz
IWebHostBuilder
sind, können Sie anrufen.GetSetting(WebHostDefaults.ServerUrlsKey)
und bekomme den aktuellen Wert.InformationsquelleAutor Set
brauchte ich für einige Grund, um die Basis-URL Beginnen.cs Konfigurieren, damit ich mit dieser
var URLS = app.ServerFeatures.Get<IServerAddressesFeature>().Addresses;
Hat es wieder einen zufälligen port, oder ist es der Hafen, die kestrel ist das hören auf? IIS-Verkehr zu den kestrel web service mit ANCM.
InformationsquelleAutor azaki
Den ASP.NET Core-Modul erzeugt eine dynamische port zuweisen an den backend-Prozess. CreateDefaultBuilder ruft die UseIISIntegration Methode. UseIISIntegration konfiguriert Kestrel, zu hören auf den dynamischen port auf dem localhost-IP-Adresse (127.0.0.1). Wenn die dynamische port ist 1234, Kestrel lauscht auf 127.0.0.1:1234. Diese Konfiguration ersetzt die anderen URL-Konfigurationen zur Verfügung gestellt von.
Aber wenn du die Funktion aus dem WebHost, nachdem es errichtet wurde, dann kann dieses verwendet werden, um die lokale Adresse.
Ich habe versucht, auf diese Weise:
hast und auf die lokalen Kestrel-Adresse in der HostedService wie diese:
InformationsquelleAutor Maxim T