使用C# HttpWebRequest发送json到Web服务

19

我对JSON很陌生,需要帮助。我使用jquery处理一些JSON数据,并从运行在web上的web服务中正确地获取信息。然而,我无法在C#中使用HttpWebRequest使其正常工作。下面是我的代码:

/// <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;
    }
}

这是关于网络服务的,我想能够使用这段代码调用 "callJson(string x)"。

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;
        }

我一直收到内部服务器错误。当我将类型更改为application/json并添加时,

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

我遇到了“媒体不允许”的错误。

提前感谢您的帮助,希望这能对其他人有所帮助。

1个回答

35

首先,您错过了将ScriptService属性添加到webservice中。

[ScriptService]

然后尝试以下方法通过JSON调用webservice。

        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;
        }

12
小注释,但我认为streamWriter.Flush()是不必要的,因为离开using块时它会自动调用。 - Robert Noack

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接