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

Получить необработанный URL-адрес от Microsoft.AspNet.Http.HttpRequest

В классе HttpRequest в Asp.Net 5 (vNext) содержатся (помимо прочего) детализированные URL-адреса для запроса, такие как Scheme, Host, Path и т.д.

Я еще нигде не заметил, что разоблачает исходный URL-адрес запроса - только эти анализируемые значения. (В предыдущих версиях было Request.Uri)

Могу ли я получить необработанный URL-адрес, не связывая его вместе с компонентами, доступными в HttpRequest?

4b9b3361

Ответ 1

Похоже, вы не можете получить к нему доступ напрямую, но вы можете создать его с помощью рамки:

Microsoft.AspNetCore.Http.Extensions.UriHelper.GetFullUrl(Request)

Вы также можете использовать вышеуказанный метод расширения.

Это возвращает string, а не Uri, но это должно служить цели! (Это также похоже на роль UriBuilder.)

Благодаря @mswietlicki за то, что он просто был реорганизован, а не пропал! А также @C-F, чтобы указать на изменение пространства имен в моем ответе!

Ответ 2

Добавьте пакет Nuget/используя:

using Microsoft.AspNetCore.Http.Extensions; 

(В ASP.NET Core RC1 это было в Microsoft.AspNet.Http.Extensions)

то вы можете получить полный URL-адрес http-запроса, выполнив:

var url = httpContext.Request.GetEncodedUrl();

или

var url = httpContext.Request.GetDisplayUrl();

в зависимости от целей.

Ответ 3

Это расширение работает для меня:

с использованием Microsoft.AspNetCore.Http;

    public static class HttpRequestExtensions
    {
        public static string GetRawUrl(this HttpRequest request)
        {
            var httpContext = request.HttpContext;
            return $"{httpContext.Request.Scheme}://{httpContext.Request.Host}{httpContext.Request.Path}{httpContext.Request.QueryString}";
        }
    }

Ответ 4

Следующий способ расширения воспроизводит логику из pre-beta5 UriHelper:

public static string RawUrl(this HttpRequest request) {
    if (string.IsNullOrEmpty(request.Scheme)) {
        throw new InvalidOperationException("Missing Scheme");
    }
    if (!request.Host.HasValue) {
        throw new InvalidOperationException("Missing Host");
    }
    string path = (request.PathBase.HasValue || request.Path.HasValue) ? (request.PathBase + request.Path).ToString() : "/";
    return request.Scheme + "://" + request.Host + path + request.Query;
}

Ответ 5

Если вам действительно нужен исходный URL-адрес, вы можете использовать следующий метод расширения:

public static class HttpRequestExtensions
{
    public static Uri GetRawUrl(this HttpRequest request)
    {
        var httpContext = request.HttpContext;

        var requestFeature = httpContext.Features.Get<IHttpRequestFeature>();

        return new Uri(requestFeature.RawTarget);
    }
}

В этом методе используется RawTarget запроса, который не отображается на самом объекте HttpRequest. Это свойство было добавлено в выпуске ASP.NET Core 1.0.0. Убедитесь, что вы используете эту или более новую версию.

ПРИМЕЧАНИЕ! Это свойство предоставляет необработанный URL-адрес, поэтому он не был декодирован, как указано в документации:

Это свойство не используется внутренне для принятия решений о маршрутизации или авторизации. Он не был UrlDecoded, и следует соблюдать осторожность при его использовании.

Ответ 6

В ASP.NET 5 beta5:

Microsoft.AspNet.Http.Extensions.UriHelper.Encode(
    request.Scheme, request.Host, request.PathBase, request.Path, request.QueryString);