Comment obtenir l'url de base, sans accès à la demande
Comment faire pour obtenir l'URL de base dans le Réseau de base de l'application sans avoir de demande?
Je sais de la Demande, vous pouvez obtenir le régime et l'hôte (c'est à dire $"{Request.Scheme}//{Request.Host}"
donnerait quelque chose comme https://localhost:5000), mais est-il possible d'obtenir cette information à partir de n'importe où ailleurs?
En d'autres mots, si j'ai une classe de service qui doit créer des Url absolues, comment puis-je obtenir l'URL courante, lorsqu'il n'est pas une requête http est disponible?
Mise à JOUR: Peut-être que le scénario n'a même pas de sens puisque l'hébergement d'URL est totalement externe à l'application et c'est pourquoi il n'a de sens pour extraire à partir de la Demande d'accueil..
IHttpContextAccessor contextAccessor
et puis la construction de la var url = $"{contextAccessor.HttpContext.Request.Scheme}://{contextAccessor.HttpContext.Request.Host.ToUriComponent()}";
Mais comme par github.com/aspnet/Hosting/issues/793 il semble qu'il sera nécessaire d'inscrire explicitement dans DI: services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
OriginalL'auteur iberodev | 2016-10-05
Vous devez vous connecter pour publier un commentaire.
Vous avez raison, l'hébergement URL est une information externe, vous pouvez tout simplement passer comme paramètre de configuration de votre application.
Peut-être que cela aidera à vous en quelque sorte: sans demande, vous pouvez obtenir un configuré à l'écoute de l'adresse (comme
http://+:5000
) à l'aide de la IWebHostBuilder interface. Il permet d'accéder aux paramètres de l'hôte via leGetSetting
méthode:Il y a un WebHostDefaults.ServerUrlsKey nom du paramètre, qui permet de configurer l'écoute de l'adresse. Nous le remplacer lors de l'ajout des
.UseUrls
méthode d'extension:ou de définir
urls
paramètre de configuration comme décrit dans la documentation (vous savez, d'écoute par défaut est configuré pourlocalhost:5000
).Ainsi, après avoir instance de
IWebHostBuilder
, vous pouvez appeler.GetSetting(WebHostDefaults.ServerUrlsKey)
et obtenir la valeur actuelle.OriginalL'auteur Set
j'avais besoin d'une raison pour obtenir l'URL de base de Départ.cs Configurer, donc je viens avec ce
var URLS = app.ServerFeatures.Get<IServerAddressesFeature>().Addresses;
Ne revient un port aléatoire, ou est-ce le port qui kestrel est à l'écoute? IIS voies de circulation pour la crécerelle de service web à l'aide de ANCM.
OriginalL'auteur azaki
L'ASP.NET Module de Base génère un port dynamique d'attribuer à l'arrière-plan du processus. CreateDefaultBuilder appelle la UseIISIntegration méthode. UseIISIntegration configure Kestrel pour écouter sur le port dynamique à l'adresse IP localhost (127.0.0.1). Si le port dynamique est 1234, la Crécerelle d'écoute à l'adresse 127.0.0.1:1234. Cette configuration remplace d'autres URL configurations fournies par.
Mais si vous obtenez la fonctionnalité de l'Hébergeur après il a été construit, il peut être utilisé pour obtenir l'adresse locale.
J'ai essayé de cette façon:
et a obtenu le local Kestrel adresse dans la HostedService comme ceci:
OriginalL'auteur Maxim T