wake-up-neo.com

So erhalten Sie die aktuelle URL in asp.net core 1.0

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?

78
oneNiceFriend

Sie müssen den Host und den Pfad separat abrufen.

 @[email protected]
95
Clint B

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}")
94
tmg

Sie können die Erweiterungsmethode von Request verwenden:

Request.GetDisplayUrl()
67
AlexBar

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.

11
Dhanuka777

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 .

8
mcNux
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);
}
6
Sergey

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).

6
Hallmanac

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&param2=b
        Request.GetUri(addQuery: false);
        //after >> https://localhost:44304/information/about

        //before >> https://localhost:44304/information/about?param1=a&param2=b
        new Uri("https://localhost:44304/information/about?param1=a&param2=b").GetHostWithNoSlash();
        //after >> https://localhost:44304
2
user3172616

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.

2