如何通过REST URL传递JSON对象

时间:2013-07-17 12:43:03

标签: c# json rest asp.net-mvc-4 asp.net-apicontroller

我在WEBUI控制器中有一个方法GetCustomerDetails(下面)

public bool GetCustomerDetails(string customer)
        {
            Uri CustUri = null;
            HttpClient client = new HttpClient();
            client.BaseAddress = new Uri("http://online/");
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            var response = client.PostAsJsonAsync("api/customers/", customer).Result;

            if (response.IsSuccessStatusCode)
            {
                CustUri = response.Headers.Location;
            }
            return false;
}

the above method has to hit the below method(API controller). 


 public string PostCustomer(string customerJsonString)
        {
            CustomerDetailDto customer = JsonConvert.DeserializeObject<CustomerDetailDto>(customerJsonString);
            bool res = _customerService.SaveOrUpdateCustomer(customer);
        if (res)
                  {
            ....
          }
   return something;
            }

但作为回应(上面的WEBUI)我收到错误消息

  

{StatusCode:405,ReasonPhrase:'Method Not Allowed',版本:1.1,   内容:System.Net.Http.StreamContent,Headers:{Pragma:no-cache   连接:关闭缓存控制:无缓存日期:2013年7月17日星期三   12:17:49 GMT服务器:ASP.NET服务器:开发服务器:   Server / 11.0.0.0 X-AspNet-Version:4.0.30319内容长度:73
  Content-Type:application / json; charset = utf-8到期:-1}}

所以任何机构都可以帮助我解决问题。

1 个答案:

答案 0 :(得分:1)

我很抱歉回答你的问题太晚了,希望你的解决方案已经实施。我发布此解决方案是为了帮助遇到相同情况的其他人。

API控制器方法PostCustomer 必须包括一个包含有效方法列表的Allow标头。所以我们有以下实现。

[System.Web.Http.HttpPost]
public string PostCustomer(string customerJsonString)
    {
        CustomerDetailDto customer = JsonConvert.DeserializeObject<CustomerDetailDto>(customerJsonString);
        bool res = _customerService.SaveOrUpdateCustomer(customer);
    if (res)
              {
        ....
      }
return something;
        }

添加HttpPost标头可以帮助您的WebUI Controller与上述方法进行对话。

谢谢, Neeraj