В запросе класса .NET Uri отсутствует зарезервированный символ точки с запятой, простые обходные пути? - PullRequest
2 голосов
/ 01 декабря 2010

Это https://msdn.microsoft.com/en-us/library/system.uri.query.aspx и это https://ietf.org/rfc/rfc1738.txt предполагают, что класс .Net Uri не распознает точку с запятой в качестве допустимого символа для представления запроса в URL-адресе.

Для обхода этой проблемы требуется всего одна строка или около того, но мне нравится мой чистый код.Если есть решение, позволяющее мне не выполнять синтаксический анализ строк вне набора классов URI .Net, я бы предпочел это.Существует ли какой-либо существующий код .Net, который обрабатывает точки с запятой для распознавания их как части запроса в URL-адресе?

1 Ответ

1 голос
/ 01 декабря 2010

RFC 3986 соглашается с RFC 1738 (который он обновляет) в определении запроса как части, следующей за знаком вопроса (?), и в утверждении, что точка с запятой может использоваться для разделения пар параметр-значение ", применимых к сегмент».

В проспекте URI (единственный случай, указанный в RFC 1738, где используется точка с запятой), точки с запятой указывают параметр и значение параметра в пути URI - не запрос.

HTTP URI действительно используют точки с запятой в своих запросах, но только после ?, например http://example.net/search?q=something;page=2. К сожалению, фактическое использование никогда полностью не заменяло символ & для этой функции, и оно плохо поддерживается серверным кодом (включая ASP.NET), что ограничивает возможности клиентского кода принимать его (почти ни один браузер не делает) .

Тем не менее, в таких случаях объект .NET Uri правильно идентифицирует только ту часть, которая следует за ? в качестве запроса, включая точки с запятой, если они присутствуют. Его поведение правильное.

...