Почему Url.IsLocalUrl возвращает false, если URL содержит фрагмент? - PullRequest
13 голосов
/ 26 декабря 2011

Я использую Url.IsLocalUrl, чтобы проверить, является ли обратный URL, переданный моему действию аутентификации, локальным или нет. Работает нормально, пока в URL нет фрагмента. То есть, /t/test-team-3/tasks/lists/15 возвращает true, но /t/test-team-3/tasks#/lists/15 возвращает false.

В чем причина этого? Есть ли какая-то неясная проблема безопасности, которая может проявиться во фрагменте, или я могу безопасно игнорировать фрагмент, когда проверяю, является ли URL локальным?

1 Ответ

20 голосов
/ 26 декабря 2011

Этот метод внутренне вызывает метод Uri.IsWellFormedUriString .Когда вы вызываете этот метод для относительного URL, содержащего фрагмент, он возвращает false.В MS Connect имеется ошибка , которая закрывается с помощью по причине .

При использовании этого метода для абсолютного URL (со схемой, подобной http /https) метод ведет себя как ожидалось.Я думаю, причина в том, что класс Uri предназначен для работы не только с HTTP-URL.Когда вы не указываете протокол (относительный URL), используется универсальный парсер URL, который не допускает фрагменты.

Так что, я думаю, у вас есть две возможности:

  • Stripфрагмент перед вызовом метода
  • Вызовите метод по абсолютному URL (http://foo.com/t/test-team-3/tasks#/lists/15), потому что в любом случае, если вы вызываете этот метод по относительному URL, мы можем ожидать, что это локальный URL.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...