it-roy-ru.com

От клиента было обнаружено потенциально опасное значение Request.Path (*)

Я получаю довольно очевидную ошибку:

От клиента было обнаружено потенциально опасное значение Request.Path (*).

Проблема связана с * в URL запроса:

https://stackoverflow.com/Search/test*/0/1/10/1

Этот URL-адрес используется для заполнения страницы поиска, где «test *» является поисковым термином, а остальная часть URL-адреса относится к различным другим фильтрам.

Есть ли простой способ включить эти специальные символы в URL? Я пытался изменить web.config, но безрезультатно.

Должен ли я вручную кодировать/декодировать специальные символы? Или есть лучший способ сделать это, я бы хотел избежать использования строк запроса. - но это может быть вариант.

Само приложение представляет собой веб-приложение c# asp.net, которое использует маршрутизацию для создания приведенного выше URL-адреса Nice.

188
user336245

Символ * недопустим в пути 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");
91
Guffa

Если вы используете .NET 4.0, вы можете разрешить эти URL через web.config

<system.web>
    <httpRuntime 
            requestPathInvalidCharacters="&lt;,&gt;,%,&amp;,:,\,?" />
</system.web>

Обратите внимание, я только что удалил звездочку (*), исходная строка по умолчанию:

<httpRuntime 
          requestPathInvalidCharacters="&lt;,&gt;,*,%,&amp;,:,\,?" />

Смотрите этот вопрос для более подробной информации.

289
Dave Transom

Вы должны кодировать значение маршрута и затем (если требуется) декодировать значение перед поиском. 

4
Tejs

Для меня, я работаю над .net 4.5.2 с веб-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

эта ссылка может помочь в создании наилучшей практики создания остальных веб-интерфейсов api https://hackernoon.com/restful-api-designing-guidelines-the-best-practices-60e1d954e7c9

4
MNF

При работе с Uniform Resource Locator (URL) существуют определенные синтаксические стандарты , в этой конкретной ситуации мы имеем дело с зарезервированными символами.

Что касается RFC 3986 , зарезервированные символы могут (или не могут) определяться как разделители по общему синтаксису, по каждому специфическому для схемы синтаксису или по специфическому для реализации синтаксису алгоритма разыменования URI; И звездочка (*) является зарезервированным символом.

Лучше всего использовать незарезервированные символы в URL-адресах, или вы можете попробовать закодировать его.

Продолжать копать :

1
Roshana Pitigala

Попробуйте установить свойство сервера веб-проекта как Локальное IIS, если оно IIS Express. Убедитесь, что URL проекта правильный и создайте виртуальный каталог.

0
Burk

Это исключение произошло в моем заявлении и было довольно обманчивым.

Он был сгенерирован, когда я вызывал веб-метод страницы ASPX с помощью вызова метода ajax, передавая объект массива JSON. Подпись метода веб-страницы содержала массив строго типизированного объекта .NET, OrderDetails . Свойство Actual_Qty было определено как int, а свойство Actual_Qty объекта JSON содержало «4» (дополнительный символ пробела). После удаления лишнего пробела преобразование стало возможным, метод веб-страницы был успешно достигнут вызовом ajax.

0
Bertha