Обнаружение requstURI динамически + ASP.NET Core
Я использую web.config для настройки некоторых правил перенаправления с использованием.Net Core.
<rule name="About Page" stopProcessing="true">
<match url="about.aspx" />
<action type="Redirect" url="/Home/About" redirectType="Permanent" />
</rule>
...
Поэтому, если пользователь заходит на сайт www.test.com/about.aspx, он перенаправляется на страницу www.test.com/Home/About.
У меня вопрос, как я могу передать то, что пользователь ввел в URL в метод контроллера? Например, www.test.com/about.aspx в этом случае?
Я пробовал с
var currentURI = new Uri($"{Request.Scheme}://{Request.Host}{Request.Path}{Request.QueryString}");
Но он обнаруживает перенаправленный URI (www.test.com/Home/About), а не первоначально введенный в URL (www.test.com/about.aspx)
Я использую приведенный ниже код в HomeController
, IActionResult
About
метод.
using (HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Head, uri))
HttpRequestMessage
"s requestUri
В данный момент параметр не является динамическим, поэтому он не сможет определить, что пользователь ввел в URL.
Помощь приветствуется.
1 ответ
Давайте опишем поток HTTP-запросов для большей ясности:
- HTTP-клиент отправляет начальный запрос
http://www.test.com/about.aspx
- Ваше правило перенаправления достигает, и сервер отвечает 301 кодом и URL перенаправления
http://www.test.com/Home/About
в заголовке местоположения. - HTTP-клиент получает этот ответ и понимает, что он должен отправить запрос с новым URL
- HTTP-клиент отправляет второй запрос на новый URL
http://www.test.com/Home/About
,
Второй запрос не содержит ссылки на исходный URL http://www.test.com/about.aspx
, Вот почему вы не можете получить оригинальный URL на стороне сервера.
Если логика вашего приложения требует наличия информации о начальном URL, я вижу здесь два варианта:
Вы можете добавить исходный URL-адрес в качестве параметра к перенаправленному URL-адресу, примерно так:
http://www.test.com/Home/About?orig_url=http://www.test.com/about.aspx
Вы должны обновить правило перенаправления новым шаблоном, а также настроить маршрутизацию в приложении ASP.Net Core.
Вы можете использовать маршрутизацию вместо перенаправления. В этом случае переадресация 301 не произойдет, сервер обработает первоначальный запрос с URL-адресом, введенным пользователем, но для обоих URL будет вызвано одно и то же действие контроллера.
Выберите подход, который больше подходит для вас. Надеюсь, это поможет.