Quiero devolver datos JSON de vuelta al cliente, en mi método de servicio Web. Una forma es crear SoapExtension
y usarlo como atributo en mi método web, etc. Otra forma es simplemente agregar el atributo [ScriptService]
al servicio web, y dejar que .NET framework devuelva el resultado como {"d": "something"}
JSON, de vuelta al usuario (d
aquí) siendo algo fuera de mi control). Sin embargo, quiero devolver algo como:Response.Write() en WebService
{"message": "action was successful!"}
El enfoque más simple podría estar escribiendo un método web como:
[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!\"}}");
}
}
De esta manera, lo voy a conseguir al cliente es:
{ "message": "action was successful!"} { "d": null}
Lo que significa que ASP.NET agrega su resultado de éxito a mi resultado JSON. Si por el contrario me ruborizo la respuesta después de escribir el mensaje de éxito, (como response.Flush();
), a excepción ocurre que dice:
Server no puede haber sido enviado cabeceras claro después de las cabeceras HTTP.
Entonces, ¿qué hacer para obtener mi resultado JSON, sin cambiar el enfoque?
Inténtelo de response.BufferOutput = true; –