web-dev-qa-db-fra.com

Utilisez C # HttpWebRequest pour envoyer json au service Web

Je suis nouveau sur JSON et j'ai besoin d'aide. J'ai du JSON qui fonctionne dans jquery et je récupère correctement les informations du service Web que j'utilise sur le Web. Cependant, je ne peux pas le faire fonctionner en utilisant HttpWebRequest en C #. Je posterai le code ci-dessous.

/// <summary>
/// Summary description for VBRService
/// </summary>
[WebService(Namespace = "http://test.visitblueridge.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
[System.Web.Script.Services.ScriptService]
public class VBRService : System.Web.Services.WebService
{
    [WebMethod]
    public string HelloWorld()
    {
        return "Hello World";
    }

    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public string callJson(string x)
    {
        return "Worked =" + x;
    }
}

C'est sur le service Web et je veux pouvoir appeler "callJson (string x)" en utilisant ce code,

var httpWebRequest = (HttpWebRequest)WebRequest.Create(webAddr);
        httpWebRequest.ContentType = "text/json";
        httpWebRequest.Method = "POST";

        using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
        {
            string json = "{\"x\":\"true\"}";

            streamWriter.Write(json);
            streamWriter.Flush();
        }

        var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
        using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
        {
            var result = streamReader.ReadToEnd();
            return result;
        }

Je reçois toujours une erreur de serveur interne. Lorsque je change le type en application/json et que j'ajoute,

request.Headers.Add("SOAPAction", "http://test.visitblueridge.com/callJson");

J'obtiens une erreur de support non acceptée.

Merci d'avance et j'espère que cela aide les autres.

19
user3003510

Tout d'abord, vous avez manqué l'attribut ScriptService à ajouter au service Web.

[ScriptService]

Ensuite, essayez la méthode suivante pour appeler le service Web via JSON.

        var webAddr = "http://Domain/VBRService.asmx/callJson";
        var httpWebRequest = (HttpWebRequest)WebRequest.Create(webAddr);
        httpWebRequest.ContentType = "application/json; charset=utf-8";
        httpWebRequest.Method = "POST";            

        using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
        {
            string json = "{\"x\":\"true\"}";

            streamWriter.Write(json);
            streamWriter.Flush();
        }

        var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
        using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
        {
            var result = streamReader.ReadToEnd();
            return result;
        }
35
PratikP24