Я хочу возвращать данные в формате JSON обратно клиенту в методе веб-службы. Один из способов - создать SoapExtension
и использовать его в качестве атрибута в моем веб-методе и т.д. Другой способ - просто добавить атрибут [ScriptService]
к веб-службе, и пусть .NET framework возвращает результат в виде {"d": "что-то"}
JSON, обратно пользователю (d
здесь является чем-то вне моего контроля). Однако я хочу вернуть что-то вроде:
{"message": "action was successful!"}
Простейшим подходом может быть написание веб-метода типа:
[WebMethod]
public static void StopSite(int siteId)
{
HttpResponse response = HttpContext.Current.Response;
try
{
// Doing something here
response.Write("{{\"message\": \"action was successful!\"}}");
}
catch (Exception ex)
{
response.StatusCode = 500;
response.Write("{{\"message\": \"action failed!\"}}");
}
}
Таким образом, на клиенте я получу:
{ "message": "action was successful!"} { "d": null}
Что означает, что ASP.NET добавляет свой результат успеха к моему результату JSON. С другой стороны, если я промою ответ после записи сообщения об успехе (например, response.Flush();
), произойдет исключение, которое гласит:
Сервер не может очистить заголовки после отправки HTTP-заголовков.
Итак, что делать, чтобы просто получить мой JSON результат, не меняя подход?