web-dev-qa-db-fra.com

Comment afficher l'URL actuelle dans asp.net core 1.0

Dans les versions précédentes de asp.net, nous pouvions utiliser

@Request.Url.AbsoluteUri

Mais il semble que cela a changé. Comment pouvons-nous faire cela dans asp.net core 1.0?

78
oneNiceFriend

Vous devez obtenir l'hôte et le chemin séparément.

 @[email protected]
95
Clint B

Vous avez besoin de schéma, hôte, chemin et queryString

@string.Format("{0}://{1}{2}{3}", Context.Request.Scheme, Context.Request.Host, Context.Request.Path, Context.Request.QueryString)

ou en utilisant la nouvelle fonctionnalité C # 6 "interpolation de chaîne"

@($"{Context.Request.Scheme}://{Context.Request.Host}{Context.Request.Path}{Context.Request.QueryString}")
94
tmg

Vous pouvez utiliser la méthode d'extension de Request:

Request.GetDisplayUrl()
67
AlexBar

Utilisez la propriété AbsoluteUri de l’Uri. Avec le noyau .Net, vous devez créer l’Uri à partir de la requête comme celle-ci,

 var location = new Uri($"{Request.Scheme}://{Request.Host}{Request.Path}{Request.QueryString}");

 var url = location.AbsoluteUri;

par exemple. Si l'URL de la demande est ' http://www.contoso.com/catalog/shownew.htm?date=today ', la même URL sera renvoyée.

11
Dhanuka777

Cela était apparemment toujours possible dans .net core 1.0 avec Microsoft.AspNetCore.Http.Extensions, ce qui ajoute une extension à HttpRequest pour obtenir une URL complète; GetEncodedUrl .

par exemple. de vue rasoir:

@using Microsoft.AspNetCore.Http.Extensions
...
<a href="@Context.Request.GetEncodedUrl()">Link to myself</a>

Depuis 2.0, ont également un chemin relatif et une requête 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

Si vous souhaitez également obtenir le numéro de port de la demande, vous devrez y accéder via le Request.Host propriété pour AspNet Core.

La propriété Request.Host n'est pas simplement une chaîne, mais un objet qui contient à la fois le domaine hôte et le numéro de port. Si le numéro de port est spécifiquement écrit dans l'URL (c.-à-d. "https://example.com:8080/path/to/resource"), l'appel de Request.Host vous donnera le domaine de l'hôte et le numéro de port comme suit: "example.com:8080".

Si vous souhaitez uniquement la valeur du domaine hôte ou uniquement le numéro de port, vous pouvez accéder à ces propriétés individuellement (c'est-à-dire Request.Host.Host ou Request.Host.Port).

6
Hallmanac

Vous pouvez envisager d’utiliser cette méthode d’extension (de Microsoft.AspNetCore.Http.Extensions namespace:

@Context.Request.GetDisplayUrl()

Pour certains de mes projets, je préfère une solution plus flexible. Il y a deux méthodes d'extensions.

1) La première méthode crée l'objet Uri à partir des données de demande entrantes (avec certaines variantes via des paramètres facultatifs). 2) La deuxième méthode reçoit l'objet Uri et renvoie string au format suivant (sans barre oblique): 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);
    }

Usage:

//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

La réponse acceptée m'a aidée, de même que le commentaire de @padigan, mais si vous souhaitez inclure les paramètres de chaîne de requête comme c'était le cas pour moi, essayez ceci:

@[email protected]()

Et vous devrez ajouter @using Microsoft.AspNetCore.Http.Extensions dans la vue pour que la méthode GetEncodedPathAndQuery () soit disponible.

2
Christopher King