Подтвердить что ты не робот

Как получить текущий URL-адрес в asp.net core 1.0

В предыдущих версиях asp.net мы могли использовать

@Request.Url.AbsoluteUri

Но, похоже, это изменилось. Как мы можем это сделать в asp.net core 1.0?

4b9b3361

Ответ 1

Вы должны получить хост и путь отдельно.

 @[email protected]

Ответ 2

Вам нужна схема, хост, путь и queryString

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

или с использованием новой функции С# 6 "Строчная интерполяция"

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

Ответ 3

Вы можете использовать метод расширения Request:

Request.GetDisplayUrl()

Ответ 4

Используйте свойство AbsoluteUri Uri, с ядром .Net вам нужно построить Uri из запроса, например,

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

 var url = location.AbsoluteUri;

например. если URL-адрес запроса " http://www.contoso.com/catalog/shownew.htm?date=today ', он вернет тот же URL-адрес.

Ответ 5

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

Если вы также хотите получить номер порта из запроса, вам необходимо получить к нему доступ через свойство Request.Host для AspNet Core.

Свойство Request.Host - это не просто строка, а объект, который содержит как хост-домен, так и номер порта. Если в URL-адресе указан номер порта , т.е. "https://example.com:8080/path/to/resource"), то вызов Request.Host даст вам домен хоста и номер порта следующим образом: "example.com:8080".

Если вы хотите только значение для домена хоста или хотите только значение для номера порта, вы можете получить доступ к этим свойствам индивидуально (т.е. Request.Host.Host или Request.Host.Port).

Ответ 7

Очевидно, это всегда было возможно в .net core 1.0 с помощью Microsoft.AspNetCore.Http.Extensions, который добавляет расширение к HttpRequest для получения полного URL; GetEncodedUrl.

например, с точки зрения бритвы:

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

Начиная с 2.0, также есть относительный путь и запрос GetEncodedPathAndQuery.

Ответ 8

Вы можете использовать этот метод расширения (из пространства имен Microsoft.AspNetCore.Http.Extensions:

@Context.Request.GetDisplayUrl()

Для некоторых моих проектов я предпочитаю более гибкое решение. Есть два метода расширения.

1) Первый метод создает объект Uri из данных входящего запроса (с некоторыми вариантами через необязательные параметры). 2) Второй метод получает объект Uri и возвращает string в следующем формате (без косой черты): 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);
    }

Использование:

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

Ответ 9

Мне помог принятый ответ, как и комментарий от @padigan, но если вы хотите включить параметры строки запроса, как это было для меня, попробуйте это:

@[email protected]()

И вам нужно будет добавить @using Microsoft.AspNetCore.Http.Extensions в представление, чтобы был доступен метод GetEncodedPathAndQuery().