Jak pozwolić plik ASMX wyjście JSON
Utworzyłem plik ASMX z kodem za plikiem. Działa dobrze, ale wyprowadza XML.
Jednak potrzebuję go do wyjścia JSON. Konfiguracja ResponseFormat nie działa. Mój kod-za to:
[System.Web.Script.Services.ScriptService]
public class _default : System.Web.Services.WebService {
[WebMethod]
[ScriptMethod(UseHttpGet = true,ResponseFormat = ResponseFormat.Json)]
public string[] UserDetails()
{
return new string[] { "abc", "def" };
}
}
6 answers
From WebService zwraca XML nawet gdy ResponseFormat ustawiony na JSON :
Upewnij się, że żądanie jest żądaniem POST, a nie GET. Scott Guthrie ma post wyjaśniający dlaczego.
Chociaż jest napisany specjalnie dla jQuery, może to być również przydatne dla Ciebie:
używanie jQuery do konsumpcji ASP.NET JSON Web Services
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-10 05:40:55
Aby otrzymać czysty łańcuch JSON, bez zawijania go w XML, musisz napisać łańcuch JSON bezpośrednio do HttpResponse
I zmienić typ powrotu WebMethod
na void
.
[System.Web.Script.Services.ScriptService]
public class WebServiceClass : System.Web.Services.WebService {
[WebMethod]
public void WebMethodName()
{
HttpContext.Current.Response.Write("{property: value}");
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-22 11:55:51
To już chyba stara wiadomość, ale magia wydaje się być:
- [ScriptService] atrybut na web service class
- [ScriptMethod (UseHttpGet = true, ResponseFormat = ResponseFormat.Json)] on method
- Content-type: application / json in request
Z tymi elementami na miejscu, żądanie GET jest pomyślne.
Do postu HTTP
- [ScriptMethod (UseHttpGet = false, ResponseFormat = ResponseFormat.Json)] on method
Oraz po stronie klienta (zakładając, że Twój webmethod nazywa się MethodName i przyjmuje jeden parametr o nazwie searchString):
$.ajax({
url: "MyWebService.asmx/MethodName",
type: "POST",
contentType: "application/json",
data: JSON.stringify({ searchString: q }),
success: function (response) {
},
error: function (jqXHR, textStatus, errorThrown) {
alert(textStatus + ": " + jqXHR.responseText);
}
});
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-25 08:05:49
A quick gotcha that I learned the hard way (zasadniczo spędzając 4 godziny w Google), można użyć PageMethods w pliku ASPX, aby zwrócić JSON (z [ScriptMethod()] marker) dla statycznej metody, jednak jeśli zdecydujesz się przenieść swoje statyczne metody do pliku asmx, to nie może być statyczna metoda.
Ponadto, musisz poinformować serwis internetowy Content-Type: application / json, aby uzyskać JSON z powrotem z połączenia (używam jQuery i 3 błędy, aby uniknąć podczas korzystania z jQuery artykuł był bardzo pouczający - pochodzi z tej samej strony, o której mowa w innej odpowiedzi tutaj).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-21 21:19:34
Czy wywołujesz serwis WWW ze skryptu klienta czy po stronie serwera?
Może się okazać, że wysłanie nagłówka content type na serwer pomoże, np.
'application / json; charset=utf-8'
Po stronie klienta, używam biblioteki po stronie klienta prototype i jest parametr contentType podczas wykonywania wywołania Ajax, gdzie można to określić. Myślę, że jQuery ma metodę getJSON.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-17 10:38:54
Alternatywa: użyj ogólnej obsługi HTTP (.ashx) i użyj ulubionej biblioteki json, aby ręcznie serializować i deserializować swój JSON.
Odkryłem, że pełna kontrola nad obsługą żądania i generowaniem odpowiedzi bije wszystko inne. NET oferuje proste, pełne usługi internetowe.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-10 20:47:07