возвращает общий список строк из обработчика в массив JS

#c# #javascript #asp.net #arrays

#c# #javascript #asp.net #массивы

Вопрос:

Пытаюсь вернуть этот список в виде массива, чтобы затем я мог получить его на стороне клиента через JS и выполнить итерацию по его значениям.

Итак, один из моих методов .ashx возвращает такой список в конце метода:

equipmentTypes — это общий список строк

         _httpContext.Response.ContentType = "text";
        _httpContext.Response.Write(equipmentTypes.ToArray());
 

Когда я получаю его на клиенте, я получаю буквальный текст «System.Строка[]». Итак, какой тип контента я должен вернуть? Очевидно, что это неверно.

Тогда я предполагаю, что могу преобразовать это в массив (объект) на стороне js.

Ответ №1:

Вы должны использовать JSON при отправке данных в javascript. Вы НЕ ДОЛЖНЫ использовать eval, поскольку это открывает вам множество уязвимостей в системе безопасности (например, XSS).

Смотрите эту статью для получения дополнительной информации о C # и JSON, включая преобразование массива C # в JSON.

Ответ №2:

Вам следует сериализовать объекты, которые вы хотите записать в поток ответов, как JSON, тип содержимого которого равен application/json . Вы можете использовать встроенную сериализацию DataContract или стороннюю библиотеку с открытым исходным кодом, такую как NewtonSoft JSON.Библиотека Net.

На клиенте вы должны использовать JSON.parse вместо eval .

Ответ №3:

На стороне сервера вы можете сгенерировать JSON с помощью встроенного JavaScriptSerializer :

 var js = new System.Web.Script.Serialization.JavaScriptSerializer();
_httpContext.Response.ContentType = "application/json";
_httpContext.Response.Write(js.Serialize(equipmentTypes.ToArray()));
 

И на клиенте вы можете использовать JSON.parse (поддерживается всеми современными браузерами), чтобы получить массив обратно. eval на самом деле это не угроза безопасности, когда вы контролируете как клиент, так и сервер, но это все равно неподходящий инструмент для работы.