Как сделать так, чтобы проверка подлинности ASP.NET сохраняла фрагмент URL при перенаправлении на страницу входа? - PullRequest
1 голос
/ 10 апреля 2010

После того, как я вставил приведенную ниже конфигурацию в мой Web.Config

<authentication mode="Forms">
  <forms name="appNameAuth"
   path="/" loginUrl="login.aspx" protection="All" timeout="30">
    <credentials passwordFormat="Clear">
      <user name="user" password="password" />
    </credentials>
  </forms>
</authentication>
<authorization>
  <deny users="?" />
</authorization>

Все запросы к

Menu.aspx#fragment

перенаправлены на

login.aspx?ReturnUrl=/Menu.aspx

и я ожидал, что он будет перенаправлен на

login.aspx?ReturnUrl=/Menu.aspx#fragment

Как добиться желаемого поведения?

Ответы [ 3 ]

5 голосов
/ 11 апреля 2010

Этот #fragment якорный тег является клиентским (браузерным) компонентом URL. Насколько я знаю, он не отправляется на WebServer, поэтому серверная часть не имеет ни малейшего представления об этом как о части перенаправления.

EDIT

Можете ли вы проверить свои журналы IIS и подтвердить это, потому что я на 99% уверен, что это не так.

Из быстрого теста на моей локальной машине.

  1. Попытка перейти к

    http://localhost/formstest/private.aspx#test

  2. Переадресация

    http://localhost/formstest/login.aspx?redirect=http%3a%2f%2flocahost%2fformstest%2fprivate.aspx#test

    (Обратите внимание, что # не является частью URL-адреса перенаправления.

  3. Проверьте IIS для первого попадания.

    2010-04-12 13:36:45 W3SVCxxx 127.0.0.1 GET /formstest/private.aspx 80 - ПОДРОБНЫЕ ДАННЫЕ - 302 0 0

    (Обратите внимание на перенаправление 302 и отсутствие токена #test на URL

  4. Проверьте IIS на попадание перенаправления.

    2010-04-12 13:36:46 W3SVCxxx 127.0.0.1 GET /formstest/login.aspx redirect = http% 3a% 2f% 2flocahost% 2fformstest% 2fprivate.aspx 80 - ПОДРОБНЫЕ ДАННЫЕ - 200 0 0

    (Ваш ответ HTTP 200 OK, но по-прежнему нет #test

Как я уже сказал, сервер ничего не знает о #anchor. Это только на стороне клиента, независимо от того, вставили ли вы его до или после выполнения запроса, или обновили ли вы его с помощью JQuery ... он не отправляется на сервер.

2 голосов
/ 13 января 2015

Я обнаружил, что использование правила перезаписи URL IIS не работает для меня. Однако решение, предоставленное по следующей ссылке, работало отлично:

http://codetunnel.io/how-to-persist-url-hash-fragments-across-a-login-redirect/

1 голос
/ 17 апреля 2010

Единственное решение, которое я нашел до сих пор, - это использование правила перезаписи для кодирования символа # в %23.

Спасибо, Клаудио!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...