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 machen?
Sie müssen den Host und den Pfad separat abrufen.
@[email protected]
Sie benötigen Schema, Host, Pfad und queryString
@string.Format("{0}://{1}{2}{3}", Context.Request.Scheme, Context.Request.Host, Context.Request.Path, Context.Request.QueryString)
oder mit der neuen C # 6 Funktion "String Interpolation"
@($"{Context.Request.Scheme}://{Context.Request.Host}{Context.Request.Path}{Context.Request.QueryString}")
Sie können die Erweiterungsmethode von Request
verwenden:
Request.GetDisplayUrl()
Verwenden Sie die AbsoluteUri -Eigenschaft des Uri. Mit .Net-Core müssen Sie den Uri aus einer Anfrage wie dieser erstellen.
var location = new Uri($"{Request.Scheme}://{Request.Host}{Request.Path}{Request.QueryString}");
var url = location.AbsoluteUri;
z.B. Wenn die Anforderungs-URL " http://www.contoso.com/catalog/shownew.htm?date=today " lautet, wird dieselbe URL zurückgegeben.
Dies war anscheinend in .NET Core 1.0 mit Microsoft.AspNetCore.Http.Extensions
Immer möglich, wodurch die Erweiterung zu HttpRequest
hinzugefügt wird, um die vollständige URL abzurufen. GetEncodedUrl .
z.B. aus der Sicht des Rasiermessers:
@using Microsoft.AspNetCore.Http.Extensions
...
<a href="@Context.Request.GetEncodedUrl()">Link to myself</a>
Haben Sie seit 2.0 auch relativen Pfad und Abfrage GetEncodedPathAndQuery .
public string BuildAbsolute(PathString path, QueryString query = default(QueryString), FragmentString fragment = default(FragmentString))
{
var rq = httpContext.Request;
return Microsoft.AspNetCore.Http.Extensions.UriHelper.BuildAbsolute(rq.Scheme, rq.Host, rq.PathBase, path, query, fragment);
}
Wenn Sie auch die Portnummer aus der Anfrage erhalten möchten, müssen Sie über Request.Host
- Eigenschaft für AspNet Core.
Die Eigenschaft Request.Host
Ist nicht einfach eine Zeichenfolge, sondern ein Objekt, das sowohl die Hostdomäne als auch die Portnummer enthält. Wenn die Portnummer speziell ausgeschrieben in der URL ist (dh "https://example.com:8080/path/to/resource"
), Erhalten Sie durch Aufrufen von Request.Host
Die Host-Domain 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 auf diese Eigenschaften einzeln zugreifen (d. H. Request.Host.Host
Oder Request.Host.Port
).
Sie können erwägen, diese Erweiterungsmethode zu verwenden (von Microsoft.AspNetCore.Http.Extensions
Namespace:
@Context.Request.GetDisplayUrl()
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 (bei einigen Varianten durch optionale Parameter). 2) Die zweite Methode empfängt das Objekt Uri
und gibt string
in folgendem Format zurück (ohne abschließenden Schrägstrich): Scheme_Host_Port
public static Uri GetUri(this HttpRequest request, bool addPath = true, bool addQuery = true)
{
var uriBuilder = new UriBuilder
{
Scheme = request.Scheme,
Host = request.Host.Host,
Port = request.Host.Port.GetValueOrDefault(80),
Path = addPath ? request.Path.ToString() : default(string),
Query = addQuery ? request.QueryString.ToString() : default(string)
};
return uriBuilder.Uri;
}
public static string HostWithNoSlash(this Uri uri)
{
return uri.GetComponents(UriComponents.SchemeAndServer, UriFormat.UriEscaped);
}
Verwendungszweck:
//before >> https://localhost:44304/information/about?param1=a¶m2=b
Request.GetUri(addQuery: false);
//after >> https://localhost:44304/information/about
//before >> https://localhost:44304/information/about?param1=a¶m2=b
new Uri("https://localhost:44304/information/about?param1=a¶m2=b").GetHostWithNoSlash();
//after >> https://localhost:44304
Die akzeptierte Antwort hat mir geholfen, ebenso wie der Kommentar von @padigan, aber wenn Sie die Parameter der Abfragezeichenfolge einschließen möchten, wie es bei mir der Fall war, versuchen Sie Folgendes:
@[email protected]()
Und Sie müssen hinzufügen @using Microsoft.AspNetCore.Http.Extensions
in der Ansicht, damit die Methode GetEncodedPathAndQuery () verfügbar ist.