繁体   English   中英

从C#代码调用REST服务

[英]Calling REST service from C# code

我正在使用以下代码使用C#调用REST服务

 string PostData= @"{""name"":""TestName""}";

 HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://something.com:1234/content/abc.v1.json");

        request.Method = "POST";
        request.ContentLength = 0;
        request.ContentType = ContentType;
        request.Accept = "application/json";
        request.KeepAlive = false;
        request.CookieContainer = cookie;

        if (!string.IsNullOrEmpty(PostData) && Method == HttpVerb.POST)
        {
            UTF8Encoding encoding = new UTF8Encoding();
            byte[] bytes = Encoding.GetEncoding("iso-8859-1").GetBytes(PostData);
            request.ContentLength = bytes.Length;
            request.AllowAutoRedirect = true;
            using (Stream writeStream = request.GetRequestStream())
            {
                writeStream.Write(bytes, 0, bytes.Length);
            }
        }

        try
        {  // Gets exception
            using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
            {

             ....
             }
        }

我在调用GetResponse()的行上收到异常“ 400错误请求”。 服务的文档说,状态码400表示缺少必需的参数。 但是如您所见,参数name (这是唯一必需的参数)随请求一起提供。

我尝试使用CURL调用该服务,并且成功执行了该服务。

curl -v -b cookie.txt -X POST -H“ Content-Type:application / json” -d“ {\\” name \\“:\\” TestName \\“}” http://something.com:1234/content /abc.v1.json

因此,我认为我的C#代码有问题,似乎没有传递参数。 任何想法?

编辑

这是文档的相关部分:

方法

POST

标头

内容类型: application / json

身体

请求主体由包含以下属性的JSON组成:

名称 :名称必填 :是类型 :字符串

响应状态码

201成功创造

400错误的请求请求正文中缺少必需的属性。

这不是在POST请求中发送数据的方式。 它看起来应该像这样:

string PostData= "name=TestName";

如果您有多个值,请使用&字符将它们分开。 例:

string PostData= "name=TestName&number=20";

我建议使用System.Net.Http HttpClient类。

        string PostData = @"{""name"":""TestName""}";

        var httpClientHandler = new HttpClientHandler();
        httpClientHandler.CookieContainer = cookies;
        var httpClient = new HttpClient(httpClientHandler);

        var content = new StringContent(PostData, 
            Encoding.GetEncoding("iso-8859-1"), "application/json");

        httpClient.PostAsync("http://something.com:1234/content/abc.v1.json", content);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM