Обнаружение 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, IActionResultAbout метод.

using (HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Head, uri))

HttpRequestMessage"s requestUri В данный момент параметр не является динамическим, поэтому он не сможет определить, что пользователь ввел в URL.

Помощь приветствуется.

1 ответ

Решение

Давайте опишем поток HTTP-запросов для большей ясности:

  1. HTTP-клиент отправляет начальный запрос http://www.test.com/about.aspx
  2. Ваше правило перенаправления достигает, и сервер отвечает 301 кодом и URL перенаправления http://www.test.com/Home/About в заголовке местоположения.
  3. HTTP-клиент получает этот ответ и понимает, что он должен отправить запрос с новым URL
  4. HTTP-клиент отправляет второй запрос на новый URL http://www.test.com/Home/About,

Второй запрос не содержит ссылки на исходный URL http://www.test.com/about.aspx, Вот почему вы не можете получить оригинальный URL на стороне сервера.

Если логика вашего приложения требует наличия информации о начальном URL, я вижу здесь два варианта:

  1. Вы можете добавить исходный URL-адрес в качестве параметра к перенаправленному URL-адресу, примерно так:http://www.test.com/Home/About?orig_url=http://www.test.com/about.aspx

    Вы должны обновить правило перенаправления новым шаблоном, а также настроить маршрутизацию в приложении ASP.Net Core.

  2. Вы можете использовать маршрутизацию вместо перенаправления. В этом случае переадресация 301 не произойдет, сервер обработает первоначальный запрос с URL-адресом, введенным пользователем, но для обоих URL будет вызвано одно и то же действие контроллера.

Выберите подход, который больше подходит для вас. Надеюсь, это поможет.

Другие вопросы по тегам