La HttpRequest
classe 5 Asp.Net (vNext) contient (entre autres) les détails sur l'URL analysables pour la demande, par exemple Scheme
, Host
, Path
etc.
Cependant, je n'ai encore repéré nulle part qui expose l'URL de la demande d'origine - uniquement ces valeurs analysées. (Dans les versions précédentes, il y avait Request.Uri
)
Puis-je récupérer l'URL brute sans avoir à la reconstituer à partir des composants disponibles sur HttpRequest?
request
uri
asp.net-core
Jon Egerton
la source
la source
Réponses:
Il semble que vous ne pouvez pas y accéder directement, mais vous pouvez le créer à l'aide du framework:
Vous pouvez également utiliser ce qui précède comme méthode d'extension.
Cela renvoie un
string
plutôt qu'un aUri
, mais cela devrait servir le but! (Cela semble également servir le rôle duUriBuilder
, aussi.)Merci à @mswietlicki pour avoir souligné qu'il vient d'être refacturé plutôt que de manquer! Et aussi à @CF pour signaler le changement d'espace de noms dans ma réponse!
la source
GetEncodedUri
ouGetDisplayUri
, selon votre cas d'utilisation.Ajoutez le package Nuget / en utilisant:
(Dans ASP.NET Core RC1, c'était dans Microsoft.AspNet.Http.Extensions)
alors vous pouvez obtenir l'URL complète de la requête http en exécutant:
ou
selon les finalités.
la source
using
directive dans votre fichier comme décrit dans la réponse, car ce ne sont pas des méthodes "normales", mais plutôt des méthodes d'extension.Si vous voulez vraiment l' URL brute réelle, vous pouvez utiliser la méthode d'extension suivante:
public static class HttpRequestExtensions { public static Uri GetRawUrl(this HttpRequest request) { var httpContext = request.HttpContext; var requestFeature = httpContext.Features.Get<IHttpRequestFeature>(); return new Uri(requestFeature.RawTarget); } }
Cette méthode utilise le
RawTarget
de la requête, qui n'apparaît pas sur l'HttpRequest
objet lui-même. Cette propriété a été ajoutée dans la version 1.0.0 d'ASP.NET Core. Assurez-vous que vous exécutez cela ou une version plus récente.REMARQUE! Cette propriété expose l' URL brute , elle n'a donc pas été décodée, comme indiqué dans la documentation:
la source
RawTarget
n'est pas défini surIHttpRequestFeature
). Pouvez-vous penser à une alternative?RawTarget
a été ajouté dans la version 1.0, en mai . Êtes-vous sûr d'utiliser la dernière version?Dans le rasoir .NET Core:
Vous pouvez également utiliser à la place de la deuxième ligne:
la source
Les autres solutions ne correspondaient pas bien à mes besoins car je voulais directement un
URI
objet et je pense qu'il vaut mieux éviter la concaténation de chaînes (également) dans ce cas, j'ai donc créé cette méthode d'extension plutôt que d'utiliser aUriBuilder
et fonctionne aussi avec des URL commehttp://localhost:2050
:la source
(80)
devrait être(-1)
. Lorsque vous avez un schéma https avec le port omis dans l'en-tête "Host", cela générera un Uri erroné (par exemplehttps://myweb:80/
, avec(-1)
luihttps://myweb
).La méthode d'extension suivante reproduit la logique de la pré-beta5
UriHelper
:la source
Cette extension fonctionne pour moi:
en utilisant Microsoft.AspNetCore.Http;
la source
Dans ASP.NET 5 beta5:
la source