2015-04-02 111 views
0

我越来越差了StatusCode:400,ReasonPhrase:'Bad Request'与下面的代码。当使用httpclient C使用json webservice时出现'Bad Request'错误C#

string url = "http://1.1.1.1"; 
Object cu = new Object(); 
HttpClient client = new HttpClient { BaseAddress = new Uri(url) }; 
var json = JsonConvert.SerializeObject(cu); 
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
var content = new StringContent(JsonConvert.SerializeObject(cu), Encoding.UTF8, "application/json"); 
var response = client.PostAsJsonAsync("/api", content); //changed content from cu 
var status = response.Result; 

我注意到我的状态码的Content-Type:仍然是text/html而不是application/json。

请协助。

注意:上面提到的编辑代码在评论中提到。 另外我能够通过下面的jquery使用服务。但我需要C#代码才能工作。

$.ajax({ 
     cache: false, 
     type: "POST", 
     async: true, 
     url: RequestUrl, 
     data: JSON.stringify(jData), 
     contentType: "application/json", 
     dataType: "json", 
     success: function (result) { 
      alert(result.ResultCode); 
     }, 
     error: function (result) { 
      alert('error' + result.responseText); 
     } 
    }); 
+0

我在'HttpClient'中找不到名为'PostAsJsonAsync'的方法。这是什么? – 2015-04-02 23:42:35

+0

@AleksandrIvanov - 请参阅[HttpClientExtensions.PostAsJsonAsync](https://msdn.microsoft.com/en-us/library/system.net.http.httpclientextensions.postasjsonasync%28v=vs.118%29.aspx) – dbc 2015-04-02 23:58:05

+0

不是真的如果不知道“jData”包含什么以及您实际上在.NET代码中发送了什么,这将非常有用。你还没有提供一个可重现的例子,这使得除了野生猜测之外很难提供任何类型的帮助。 – 2015-04-03 14:59:11

回答

0

我只是想你的代码,它实际上是设置正确的标题:

Accept: application/json 
Content-Type: application/json; charset=utf-8 

因此,有可能出错了您的JSON。您应该阅读您的端点的文档。在这种情况下使用Fiddler(伟大的HTTP客户端)也很有帮助。

+0

感谢您的建议。我确实下载了Fiddler并稍微玩了一下。但是,即使在Fiddler我注意到内容类型是text/html。 你是如何看到json的?只是好奇。 – okr 2015-04-03 14:21:34

+0

您确定此内容类型不是来自回复吗? – 2015-04-04 11:35:33

0

你确定你符合API的预期吗?您发送的JSON有效负载是:

{"Headers":[{"Key":"Content-Type","Value":["application/json; charset=utf-8"]}]} 

发送作为有效负载似乎有点奇怪。

我猜你只是不符合API。它可能期望你发送任何内容或非常特别格式化的JSON对象,并且你不会发送它想要的内容。因此,它会响应“错误的请求”,因为请求不好(即格式不正确)。查看你所调用的API的文档,并确保你传递了它所期望的。

您确定服务需要响应POST而不是GET吗?

+0

我有一个通过C#代码发送的填充对象。只是没有添加该片段。但我很确定,对象是正确的,因为我能够通过jquery使用服务。 – okr 2015-04-03 14:54:27

+0

然后,您需要比较jQuery发送的有效内容到.NET代码发送的有效内容。有些东西明显不同,我愿意打赌,不同之处在于你发送的内容。在不知道你打电话给哪个API的情况下(公开的,私人的),诊断问题实际上是不可能的。 – 2015-04-03 14:57:50