Потенциально опасный запрос.Значение пути было обнаружено от клиента (*)
Я получаю довольно самоочевидную ошибку:
потенциально опасный запрос.Значение пути было обнаружено от клиента (*).
проблема из-за *
в URL запроса:
https://stackoverflow.com/Search/test*/0/1/10/1
этот url-адрес используется для заполнения страницы поиска, где 'test*' является поисковым термином, а остальная часть url-адреса относится к различным другим фильтрам.
есть ли простой способ разрешить эти специальные символы в URL? Я пробовал изменение web.config
, но безрезультатно.
должен ли я вручную кодировать / декодировать специальные символы?
Или есть лучшая практика для этого, я хотел бы избежать использования строк запроса. - но это может быть вариант.
само приложение является c# asp.net
приложение webforms, которое использует маршрутизацию для создания хорошего URL-адреса выше.
7 ответов:
The
*
символ не допускается в пути URL, но нет никаких проблем с его использованием в строке запроса:http://localhost:3286/Search/?q=test*
Это не проблема кодировки,
*
символ не имеет особого значения в URL, так что не имеет значения, если вы URL кодировать его или нет. Вам нужно будет кодировать его с помощью другой схемы, а затем декодировать его.например, используя произвольный символ в качестве escape-символа:
query = query.Replace("x", "xxx").Replace("y", "xxy").Replace("*", "xyy");
и расшифровка:
query = query.Replace("xyy", "*").Replace("xxy", "y").Replace("xxx", "x");
Если вы используете .NET 4.0, вы должны иметь возможность разрешить эти URL-адреса через интернет.конфигурации
<system.web> <httpRuntime requestPathInvalidCharacters="<,>,%,&,:,\,?" /> </system.web>
обратите внимание, я только что удалил звездочку ( * ), исходная строка по умолчанию:
<httpRuntime requestPathInvalidCharacters="<,>,*,%,&,:,\,?" />
посмотреть этот вопрос для более подробной информации.
вы должны кодировать значение маршрута, а затем (если требуется), расшифровывают значение перед поиском.
при работе с Uniform Resource Locator (URL) s есть определенные стандарты синтаксис в данной конкретной ситуации мы имеем дело с Зарезервированные Символы.
до RFC 3986, зарезервированные символы могут (или не могут) быть определены как разделители общим синтаксисом, каждым специфичным для схемы синтаксисом или специфичным для реализации синтаксисом алгоритма разыменования URI; и Звездочка (*) является зарезервированным Характер.
лучше всего использовать Незарезервированных Символов в URL-адресах или вы можете попробовать кодировать его с помощью
java.net.URLEncoder
.продолжай копать :
для меня, я работаю на .net 4.5.2 с web api 2.0, У меня такая же ошибка, я установил ее просто добавив requestPathInvalidCharacters="" в requestPathInvalidCharacters вы должны установить недопустимые символы иначе вы должны удалить символы, которые вызывают эту проблему.
<system.web> <httpRuntime targetFramework="4.5.2" requestPathInvalidCharacters="" /> <pages > <namespaces> .... </namespaces> </pages> </system.web>
**обратите внимание, что это не очень хорошая практика, может быть сообщение с этим параметром в качестве атрибута объекта лучше или попытаться закодировать специальный символ. -- После поиска по лучшей практике для проектируя REST api, я обнаружил, что в поиске, сортировке и разбивке на страницы мы должны обрабатывать параметр запроса следующим образом
/companies?search=Digital%26Mckinsey
и это решает проблему, когда мы кодируем & и переназначаем его на url %26 в любом случае, на сервере мы получаем правильный параметр Digital & Mckinsey
эта ссылка может помочь в наилучшей практике проектирования REST web api https://hackernoon.com/restful-api-designing-guidelines-the-best-practices-60e1d954e7c9
это исключение произошло в моем приложении и было довольно вводящим в заблуждение.
Он был брошен, когда я звонил.веб-метод страницы aspx с использованием вызова метода ajax, передавая объект массива JSON. Сигнатура метода веб-страницы содержала массив строго типизированного объекта .NET OrderDetails. Свойство Actual_Qty было определено как int, а свойство Actual_Qty объекта JSON содержало "4" (дополнительный пробел). После удаления дополнительного пространства было произведено преобразование возможно, метод веб-страницы был успешно достигнут вызовом ajax.
попробуйте установить сервер веб-проекта в качестве локального IIS, если это IIS Express. Убедитесь, что url-адрес проекта правильный, и создайте каталог virual.
Comments