无法从.net客户端web-api Web服务

时间:2015-06-13 18:40:06

标签: asp.net asp.net-web-api

我有一个.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
}}

可能是什么问题。提前告诉你

1 个答案:

答案 0 :(得分:0)

您只发布了一个Category.ToString,如果您没有将ToString重写为Json或XML字符串,它将在服务器端失败,因为无法将内容反序列化为Category对象。您应该在发布之前在客户端上序列化类别。还要确保您的请求标头包含正确的Content-Type of application / json。通过发布StringContent,Content-Type将不是application / json。您正在设置Accept标头,但这仅描述返回到客户端的数据,而不是您要发布的数据。最后一件事,我不会对get和post请求使用相同的HttpClient。每个方法都应该使用它自己的HttpClient,因此根据调用你没有任何额外的头文件。