Код с кодом URL (% 23), вызывающий 404 в приложении ASP.NET - PullRequest
2 голосов
/ 24 сентября 2010

У меня есть глубокая ссылка Silverlight RIA, пытающаяся использовать обратный вызов Twitter OAuth.URL-адрес страницы обратного вызова в RIA:

http://example.com/RiaTestPage.aspx#callback

Твиттер перезванивает на этот URL, если знак # закодирован в URL;поэтому URL обратного вызова, который я предоставляю в Twitter:

http://example.com/RiaTestPage.aspx%23callback

RiaTestPage.aspx, конечно, существует, но когда Twitter перезванивает по этому URL, я получаю 404 (из VS 2010 ASP.NETСервер разработки)

Ошибка сервера в приложении '/'

Ресурс не найден.

Описание: HTTP 404. Требуемый ресурс (илиодна из его зависимостей) могла быть удалена, изменилось имя или временно недоступна.Пожалуйста, просмотрите следующий URL и убедитесь, что он написан правильно.

Запрошенный URL: /RiaTestPage.aspx#callback

Хотя знак # был правильно декодирован в приведенном выше сообщении об ошибке, 404, похоже, является результатом закодированного знака #,Если я вручную изменяю URL обратного вызова, который вызвал 404,

http://example.com/RiaTestPage.aspx%23callback

на это:

http://example.com/RiaTestPage.aspx#callback

Страница обратного вызова в RIA загружается нормально.Почему я получаю 404 в этой ситуации?

Ответы [ 3 ]

5 голосов
/ 24 сентября 2010

Вы получаете ошибку 404, потому что часть #callback не является частью URL.Это закладка, используемая браузером, и она никогда не отправляется в запросе на сервер.Если вы закодируете хеш, он вместо этого станет частью имени файла, и файла с именем RiaTestPage.aspx#callback.

не будет.
2 голосов
/ 24 сентября 2010

Причину проблемы уже объяснил Гуффа. Существует несколько решений:

1. Служба перенаправления:

Используйте службу перенаправления (например, bit.ly или даже ваш собственный сервер) для публикуемого вами URL. Он предоставит стандартную ссылку, которую Twitter разрешит, и отправит ее на нужную страницу вашего сайта. Эти сервисы также могут сделать URL намного короче, что является плюсом для постов в Twitter .

2. Пользовательский 404:

Реализуйте пользовательскую страницу 404 на своем сайте, и при появлении определенных URL-адресов, таких как ваш пример, исправьте кодировку и перенаправьте на нужную страницу.

3. Просто добавить? на вашу ссылку !:

? символ обозначает конец спецификации файла и начало параметров. Параметры не требуются перед закладкой, поэтому этот URL должен работать для ссылки в Твиттере:

http://example.com/RiaTestPage.aspx?%23callback

позвонит

http://example.com/RiaTestPage.aspx?#callback

, что совпадает с:

http://example.com/RiaTestPage.aspx#callback
1 голос
/ 11 августа 2015

В IIS7 вы можете использовать модуль перезаписи URL или вручную отредактировать файл web.config, чтобы добавить это правило перезаписи, которое превращает% 23 в #.Это не выглядит интуитивно понятным, потому что вы ставите # в оба поля поиска и замены регулярных выражений, но это работает.Это перенаправляет входящие URL-адреса, такие как www.domain.com/page%23anchorname, на www.domain.com/page#anchorname и позволяет избежать ошибки 404.

<rewrite>
  <rules>
     <rule name="unencode hashmark">
        <match url="^([^\#]*)#(.*)$" />
        <action type="Redirect" url="{R:1}#{R:2}" />
     </rule>
  </rules>
</rewrite>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...