我有一个.net客户端试图向web api服务发出http请求 这是我的要求:
public List<Category> GetCategories()
{
HttpClient client = new HttpClient();
client.BaseAddress = new Uri("http://localhost:54558/");
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
Task<string> response = client.GetStringAsync("api/CategoryApi/");
List<Category> lstCategory = JsonConvert.DeserializeObjectAsync<List<Category>>(response.Result).Result;
return lstCategory;
}
public void Create(Category category)
{
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var stringContent = new StringContent(category.ToString());
HttpResponseMessage responseMessage = client.PostAsync("api/CategoryApi/", stringContent).Result;
}
和我的webapi
public IEnumerable<Category> GetCategories()
{
return categoryRepository.data;
}
public string PostCategory(Category category)
{
categoryRepository.add(category);
return "MessageOk";
}
所以,当我向web-api的GetCategories行动发出请求时,一切正常 无论我做什么,似乎.net应用程序都找不到web-api的Post动作,我从来没有真正看到进入Postcategory方法 因为我也在这里提出了断点。
我只收到错误
atusCode: 500, ReasonPhrase: 'Internal Server Error', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
{
Pragma: no-cache
X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNccG9zdGdyZXNcRGVza3RvcFxXZWJBcGlTZXJ2aWNlXFdlYkFwaVNlcnZpY2VcYXBpXENhdGVnb3J5QXBpXA==?=
Cache-Control: no-cache
Date: Sat, 13 Jun 2015 17:55:16 GMT
Server: Microsoft-IIS/8.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Content-Length: 1022
Content-Type: application/json; charset=utf-8
Expires: -1
}}
可能是什么问题。提前告诉你
答案 0 :(得分:0)
您只发布了一个Category.ToString,如果您没有将ToString重写为Json或XML字符串,它将在服务器端失败,因为无法将内容反序列化为Category对象。您应该在发布之前在客户端上序列化类别。还要确保您的请求标头包含正确的Content-Type of application / json。通过发布StringContent,Content-Type将不是application / json。您正在设置Accept标头,但这仅描述返回到客户端的数据,而不是您要发布的数据。最后一件事,我不会对get和post请求使用相同的HttpClient。每个方法都应该使用它自己的HttpClient,因此根据调用你没有任何额外的头文件。