Frage

Ich habe eine ASMX-Datei mit einem Code hinter Datei. Es funktioniert gut, aber es ist XML ausgegeben werden.

Aber ich brauche es zur Ausgabe von JSON. Die Response Konfiguration scheint nicht zu funktionieren. Mein Code-behind ist:

[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" };
    }
}
War es hilfreich?

Lösung

gibt WebService XML selbst wenn Response zu JSON gesetzt:

  

Stellen Sie sicher, dass die Anforderung eine POST-Anfrage, kein GET. Scott Guthrie hat eine post zu erklären, warum .

     

Obwohl es speziell für jQuery geschrieben, dies kann auch nützlich sein für Sie:
   jQuery Verbrauchen ASP.NET JSON Web Services

Andere Tipps

ein reines JSON-String erhalten, ohne dass sie in eine XML-Datei sind, haben Sie den JSON-String direkt an den HttpResponse zu schreiben und den WebMethod Rückgabetyp ändern void.

    [System.Web.Script.Services.ScriptService]
    public class WebServiceClass : System.Web.Services.WebService {
        [WebMethod]
        public void WebMethodName()
        {
            HttpContext.Current.Response.Write("{property: value}");
        }
    }

Dies ist wahrscheinlich Nachrichten jetzt, aber die Magie scheint zu sein:

  • [Scriptservice] -Attribut auf Web-Service-Klasse
  • [Script (UseHttpGet = true, Responseformat = ResponseFormat.Json)] auf Verfahren
  • Content-type: application / json in Anfrage

Mit diesen Stücken an Ort und Stelle, eine GET-Anforderung erfolgreich ist.

Für eine HTTP-POST

  • [Script (UseHttpGet = false, Responseformat = ResponseFormat.Json)] auf Verfahren

und auf der Client-Seite (vorausgesetzt, Ihr Webmethod ist Method genannt, und es dauert einen einzigen Parameter namens 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);
            }
        });

Eine schnelle Gotcha, die ich auf die harte Tour gelernt (im Grunde verbringen 4 Stunden auf Google), können Sie Pagemethods in Ihrer ASPX-Datei verwenden JSON zurückzukehren (mit dem [Script ()] Marker) für eine statische Methode, aber wenn Sie entscheiden, Ihre statischen Methoden zu einer asmx Datei zu verschieben, kann es nicht eine statische Methode sein.

Außerdem müssen Sie dem Web-Service-Content-Type sagen: application / json um JSON aus dem Aufruf zurück zu bekommen (ich bin mit jQuery und den 3 Fehler beim Artikel mit jQuery zu vermeiden, sehr aufschlussreich war - sein aus die gleiche Website in einer anderen Antwort erwähnt hier).

rufen Sie den Web-Service von Client-Skript oder auf der Server-Seite?

Sie finden kann ein Inhaltstyp-Header an den Server senden, wird helfen, z.B.

"application / json; charset = utf-8'

Auf der Client-Seite, verwende ich Prototyp Client-Bibliothek und es gibt einen Parameter, wenn content einen Ajax-Aufruf zu machen, wo Sie diese angeben können. Ich denke, jQuery eine getJSON Methode hat.

Alternative: Verwenden Sie einen generischen HTTP-Handler (.ashx) und Ihre Lieblings-json-Bibliothek verwenden, um manuell zu serialisiert und Ihre JSON deserialisieren.

Ich habe festgestellt, dass eine vollständige Kontrolle über die Bearbeitung einer Anfrage und Erzeugen einer Antwort alles andere .NET-Angebote für einfache Beats, RESTful Web-Services.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top