In früheren Versionen von asp.net konnten wir verwenden
@Request.Url.AbsoluteUri
Aber es scheint sich geändert zu haben. Wie können wir das in asp.net Core 1.0 tun?
asp.net-core
asp.net-core-mvc
asp.net-core-1.0
oneNiceFriend
quelle
quelle
Antworten:
Sie müssen den Host und den Pfad separat abrufen.
quelle
@
zwischen den beiden Saiten? Könntest du es erklären?@HttpContext
stattdessen verwenden@Context
. Für Teilansichten@Context
funktioniert. Habe ich eine Verwendung vergessen?Url.Action("Action", null, null, Request.Url.Scheme);
stackoverflow.com/questions/434604/…Sie benötigen Schema, Host, Pfad und queryString
oder mit der neuen C # 6-Funktion "String-Interpolation"
quelle
Sie können die Erweiterungsmethode verwenden von
Request
:quelle
@using Microsoft.AspNetCore.Http.Extensions
dann hinzufügen@Context.Request.GetDisplayUrl()
Suitable only for display. This format should not be used in HTTP headers or other HTTP operations.
Folgendes angegeben ist. Auf dieser Grundlage halte ich die Lösung von @ tmg für die beste (möglicherweise in Ihre eigene Erweiterungsmethode eingeschlossen).Dies war anscheinend in .net Core 1.0 mit immer möglich
Microsoft.AspNetCore.Http.Extensions
, wodurch eine Erweiterung hinzugefügt wirdHttpRequest
, um die vollständige URL zu erhalten. GetEncodedUrl .zB aus der Sicht des Rasiermessers:
Haben Sie seit 2.0 auch relativen Pfad und Abfrage GetEncodedPathAndQuery .
quelle
Verwenden Sie die AbsoluteUri- Eigenschaft des Uri. Mit dem .Net-Kern müssen Sie den Uri aus einer solchen Anforderung erstellen.
Wenn die Anforderungs-URL beispielsweise " http://www.contoso.com/catalog/shownew.htm?date=today " lautet, wird dieselbe URL zurückgegeben.
quelle
Sie können diese Erweiterungsmethode in Betracht ziehen (aus dem
Microsoft.AspNetCore.Http.Extensions
Namespace:Für einige meiner Projekte bevorzuge ich eine flexiblere Lösung. Es gibt zwei Erweiterungsmethoden.
1) Die erste Methode erstellt ein
Uri
Objekt aus eingehenden Anforderungsdaten (mit einigen Varianten über optionale Parameter). 2) Die zweite Methode empfängt einUri
Objekt und gibt esstring
im folgenden Format zurück (ohne abschließenden Schrägstrich): Scheme_Host_PortVerwendung:
quelle
quelle
httpContext
? Das wird nicht funktionieren mitMicrosoft.AspNetCore.Http.HttpContext.Request
Wenn Sie auch die Portnummer aus der Anfrage herausholen möchten, müssen Sie über die
Request.Host
herausholen Eigenschaft für AspNet Core darauf zugreifen.Die
Request.Host
Eigenschaft ist nicht einfach eine Zeichenfolge, sondern ein Objekt, das sowohl die Hostdomäne als auch die Portnummer enthält. Wenn die Portnummer speziell ist geschrieben in der URL (dh"https://example.com:8080/path/to/resource"
), dann AufrufRequest.Host
gibt Ihnen die Host - Domäne und die Portnummer wie folgt:"example.com:8080"
.Wenn Sie nur den Wert für die Hostdomäne oder nur den Wert für die Portnummer möchten, können Sie einzeln auf diese Eigenschaften zugreifen (dh
Request.Host.Host
oderRequest.Host.Port
).quelle
Die akzeptierte Antwort hat mir geholfen, ebenso wie der Kommentar von @padigan, aber wenn Sie die Abfragezeichenfolgenparameter wie bei mir einschließen möchten, versuchen Sie Folgendes:
@using Microsoft.AspNetCore.Http.Extensions
Außerdem müssen Sie die Ansicht hinzufügen , damit die Methode GetEncodedPathAndQuery () verfügbar ist.quelle
Es gibt eine saubere Möglichkeit, die aktuelle URL von einer Razor-Seite oder einer PageModel-Klasse abzurufen. Das ist:
Bitte beachten Sie, dass ich die "ASP.NET Core Razor Pages" meinte, nicht die MVC.
Ich verwende diese Methode, wenn ich das kanonische URL-Meta-Tag auf den ASP.NET Core-Rasierseiten drucken möchte. Aber es gibt einen Haken. Sie erhalten die URL, die die richtige URL für diese Seite sein soll. Lassen Sie mich erklären.
Angenommen, gemäß der Route, die Sie für eine Seite definiert haben, sollte Ihre URL so aussehen
Angenommen, Sie haben eine Route "ID" für Ihre Seite definiert. Url.PageLink () gibt Ihnen also genau diese URL. Wenn der Benutzer dieser URL zusätzliche Elemente hinzufügt, z.
Dann erhalten Sie mit dieser Methode nicht das "SomethingElse". Und deshalb eignet es sich genau zum Drucken von kanonischen URL-Meta-Tags auf der HTML-Seite.
quelle