HttpRequest
Класс в Asp.Net 5 (vNext) содержит (помимо всего прочего) разбираемой подробной информации о URL для запроса, таких как Scheme
, Host
, и Path
т.д.
Я еще не обнаружил нигде, открывающей исходный URL-адрес запроса - только эти проанализированные значения. (В предыдущих версиях было Request.Uri
)
Могу ли я вернуть необработанный URL-адрес, не собирая его из компонентов, доступных в HttpRequest?
request
uri
asp.net-core
Джон Эгертон
источник
источник
Ответы:
Похоже, вы не можете получить к нему доступ напрямую, но вы можете создать его с помощью фреймворка:
Вы также можете использовать вышеуказанное как метод расширения.
Это возвращает a,
string
а не aUri
, но это должно служить цели! (Похоже, это тоже играет рольUriBuilder
.)Спасибо @mswietlicki за то, что он просто отремонтирован, а не отсутствует! А также @CF, чтобы указать на изменение пространства имен в моем ответе!
источник
GetEncodedUri
илиGetDisplayUri
, в зависимости от вашего варианта использования.Добавьте пакет Nuget / используя:
(В ASP.NET Core RC1 это было в Microsoft.AspNet.Http.Extensions)
тогда вы можете получить полный URL-адрес http-запроса, выполнив:
или
в зависимости от целей.
источник
using
в вашем файле есть директива, как описано в ответе, поскольку это не «обычные» методы, а, скорее, методы расширения.Если вам действительно нужен фактический необработанный 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
объекте. Это свойство было добавлено в версии 1.0.0 ASP.NET Core. Убедитесь, что вы используете эту или более новую версию.НОТА! Это свойство предоставляет необработанный URL-адрес, поэтому он не был декодирован, как указано в документации:
источник
RawTarget
не определеноIHttpRequestFeature
). Вы можете придумать альтернативу?RawTarget
был добавлен в выпуск 1.0 еще в мае . Вы уверены, что используете последнюю версию?В бритве .NET Core:
Вы также можете использовать вместо второй строки:
источник
Другие решения не соответствовали моим потребностям, потому что я хотел напрямую
URI
объект, и я думаю, что в этом случае лучше избегать конкатенации строк (также), поэтому я создал эти методы расширения, чем использовать a,UriBuilder
и работает также с URL-адресами, напримерhttp://localhost:2050
:источник
(80)
должно быть(-1)
. Если у вас есть https-схема с опущенным портом в заголовке "Host", это будет генерировать неправильный Uri (напримерhttps://myweb:80/
, с(-1)
ним будетhttps://myweb
).Следующий метод расширения воспроизводит логику из предварительной бета-версии5
UriHelper
:источник
У меня работает это расширение:
с использованием Microsoft.AspNetCore.Http;
источник
В ASP.NET 5 beta5:
источник