Я использую свободный NHibernate. При фильтрации данных, таких как «Суп & Caesar», т.е. для строки, включая знак «амперсанд», выдает ошибку: - Unterminated string начинается с 12. Я попытался провести исследование в нем и обнаружил, что файл ODataExpression.cs использует ниже код для фильтра из-за который он забросил.OData Символ амперсанда выражения для ошибки фильтра фильтра
private void ParseQueryString(string queryString)
{
if (queryString.Length == 0)
return;
var queryElements = queryString.Split('&');
for (int i = 0; i < queryElements.Length; i++)
{
string[] elementParts = queryElements[i].Split(new[] { '=' }, 2);
string key = HttpUtil.UriDecode(elementParts[0]);
string value = elementParts.Length == 2 ? HttpUtil.UriDecode(elementParts[1]) : "";
ProcessQueryStringPart(key, value);
}
}
Я хотел знать, есть ли способ избежать этого. Проверка текстового поля не будет подходящим решением для меня, поскольку я ушел далеко в свой проект, и изменение все будет проблематично.
Обратите внимание: я использую EXTJS, который отправляет данные в закодированной форме, поэтому имеет что-то позади кода.
Спасибо.
, когда строковый литерал 'Soup & Caesar' входит как часть строки запроса http, тогда он должен быть скрытым с помощью url, потому что то, что делает вышеуказанная функция, - это токенизация http query string, где & является разделителем. Как выглядит ваша полная строка запроса? Кроме того, я думаю, что данные из текстового поля лучше были POSTED, а не GETted, поэтому вы будете читать его из коллекции форм ASP.NET, а не строки запроса. (текущий сценарий похож на классическую уязвимость атаки в sql-инъекции). – dlatikay
ExtJS не отправляет автоматически все данные в кодированной форме. Пожалуйста, разместите соответствующие клиентские части своего кода. – Alexander