将JSON发布到REST服务

时间:2019-03-05 21:33:29

标签: c# .net rest

我正在尝试从Plex使用带有Rest的云ERP系统使用数据源。发送PUT时,我收到禁止的状态代码

HTTP Header

enter image description here

public  static string Put(string url,string Body,PCNModel pcn)
    {
        HttpClient client = new HttpClient();

        int timeOutSec = 90;
        string accept = "application/json";
        string acceptEncoding = "gzip, deflate";
        string contentType = "application/json";
        var credentials = pcn.UserName + ":" + pcn.Password;
        var bytes = Encoding.UTF8.GetBytes(credentials);
        var encodedCredentials = Convert.ToBase64String(bytes);
        var authorizationHeaderValue = encodedCredentials;
        HttpResponseMessage response = new HttpResponseMessage();


        client.Timeout = new TimeSpan(0, 0, timeOutSec);
        //client.DefaultRequestHeaders.Add("Accept", string.Format(accept));
        client.DefaultRequestHeaders.Add("Accept", (accept));

        client.DefaultRequestHeaders.Add("Accept-Encoding", string.Format(acceptEncoding));
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(contentType));
        client.DefaultRequestHeaders.Add("Authorization", string.Format("Basic {0}", authorizationHeaderValue));
        HttpContent httpBody = Body;
        httpBody.Headers.ContentType = new MediaTypeHeaderValue(contentType);
        response = client.PutAsync(url, httpBody).Result;
        var error = response.StatusCode.ToString();
        var requestMessage = response.RequestMessage;
        var responseContent = response.Content;
        var responseReasonPhrase = response.ReasonPhrase;
        var responseHeader = response.Headers;     


        MessageBox.Show(error);
        MessageBox.Show(requestMessage.ToString());
        //MessageBox.Show(responseContent.ToString());
        //MessageBox.Show(responseReasonPhrase.ToString());
        //MessageBox.Show(responseHeader.ToString());

         var content = response.Content.ReadAsStringAsync().Result;
        return content;
    }

我不确定它会在哪里反弹。

2 个答案:

答案 0 :(得分:0)

您需要在调用PutAsync之前将主体解析为json,这是一个小代码sinppet

client.DefaultRequestHeaders.Add("authKey", authKey);
var json = JsonConvert.SerializeObject(product, Formatting.None, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
var content = new StringContent(json, Encoding.UTF8, "application/json");
var response = await client.PutAsync(url, content);
if (response.IsSuccessStatusCode)
{

}
else
{
    var result = response.Content.ReadAsStringAsync().Result;
    throw new Exception("Error Occured in Update Product" + result);
}

答案 1 :(得分:0)

事实证明,我提供的凭据不正确。这使我无法处理对端点的Web服务调用。