Die HttpRequest
Klasse in Asp.Net 5 (vNext) enthält (unter anderem) analysiert Details über die URL für die Anforderung, wie Scheme
, Host
, Path
usw.
Ich habe noch nirgendwo etwas entdeckt, das die ursprüngliche Anforderungs-URL anzeigt - nur diese analysierten Werte. (In früheren Versionen gab es Request.Uri
)
Kann ich die unformatierte URL zurückerhalten, ohne sie aus den auf HttpRequest verfügbaren Komponenten zusammensetzen zu müssen?
request
uri
asp.net-core
Jon Egerton
quelle
quelle
Antworten:
Es sieht so aus, als könnten Sie nicht direkt darauf zugreifen, aber Sie können es mit dem Framework erstellen:
Sie können das oben genannte auch als Erweiterungsmethode verwenden.
Dies gibt
string
eher ein als ein zurückUri
, aber es sollte den Zweck erfüllen! (Dies scheint auch der Rolle desUriBuilder
zu dienen.)Vielen Dank an @mswietlicki für den Hinweis, dass es nur überarbeitet wurde, anstatt zu fehlen! Und auch an @CF, um auf die Änderung des Namespace in meiner Antwort hinzuweisen!
quelle
GetEncodedUri
oderGetDisplayUri
auf.Fügen Sie das Nuget-Paket hinzu / using:
(In ASP.NET Core RC1 war dies in Microsoft.AspNet.Http.Extensions)
Dann können Sie die vollständige http-Anforderungs-URL erhalten, indem Sie Folgendes ausführen:
oder
abhängig von den Zwecken.
quelle
using
Direktive in Ihrer Datei haben, wie in der Antwort beschrieben, da dies keine "normalen" Methoden sind, sondern Erweiterungsmethoden.Wenn Sie wirklich die tatsächliche, unformatierte URL möchten , können Sie die folgende Erweiterungsmethode verwenden:
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); } }
Diese Methode verwendet die
RawTarget
Anforderung, die nicht auf demHttpRequest
Objekt selbst angezeigt wird . Diese Eigenschaft wurde in der Version 1.0.0 von ASP.NET Core hinzugefügt. Stellen Sie sicher, dass Sie diese oder eine neuere Version ausführen.HINWEIS! Diese Eigenschaft macht die unformatierte URL verfügbar, sodass sie nicht dekodiert wurde, wie in der Dokumentation angegeben:
quelle
RawTarget
ist nicht definiertIHttpRequestFeature
). Können Sie sich eine Alternative vorstellen?RawTarget
wurde in der Version 1.0 bereits im Mai hinzugefügt . Sind Sie sicher, dass Sie mit der neuesten Version arbeiten?In .NET Core-Rasiermesser:
Sie können auch anstelle der zweiten Zeile Folgendes verwenden:
quelle
Die anderen Lösungen passten nicht gut zu meinen Anforderungen, da ich direkt ein
URI
Objekt haben wollte und ich denke, dass es in diesem Fall besser ist, die Verkettung von Zeichenfolgen (auch) zu vermeiden.UriBuilder
Deshalb habe ich diese Erweiterungsmethoden erstellt, als a zu verwenden und arbeite auch mit URLs wiehttp://localhost:2050
:quelle
(80)
sollte sein(-1)
. Wenn Sie ein https-Schema haben, bei dem der Port im "Host" -Header weggelassen wurde, wird ein falscher Uri generiert (z. B.https://myweb:80/
mit(-1)
diesemhttps://myweb
).Die folgende Erweiterungsmethode gibt die Logik aus der Zeit vor Beta5 wieder
UriHelper
:quelle
Diese Erweiterung funktioniert für mich:
using Microsoft.AspNetCore.Http;
quelle
In ASP.NET 5 Beta5:
quelle