【问题标题】:Passing json data to a WebApi with special characters results to null将 json 数据传递给带有特殊字符的 WebApi 结果为 null
【发布时间】:2014-07-08 18:36:50
【问题描述】:

我有一个正在传递给 webapi 的 json 字符串,现在的问题是,当我尝试添加特殊字符时,接收对象变为空。

这是我做的。

string json = JsonConvert.SerializeObject(ojectParams);

        WebClient client = new WebClient();

        client.Headers.Add("content-type", "application/json; charset=utf-8");
        client.Headers.Add("AppKey", WebUser.AppKey);
        client.Headers.Add("AppSecret", WebUser.AppSecret);
        client.Headers.Add("AccountId", WebUser.AccountId.ToString());

        if (!string.IsNullOrEmpty(WebUser.StoreId))
        {
            client.Headers.Add("StoreId", WebUser.StoreId);
        }

        var returnedStringObject = client.UploadString(string.Format("{0}/{1}", ConfigurationManager.AppSettings["Api"], endpoint), method, json);

这是 json 字符串:

"{\"Firstname\":\"kyv®\",\"Lastname\":\"sab®\"}"

我已在标题中添加了这个,希望它能解决问题。但没有运气。

charset=utf-8

在接收端点上,obj 变为 null。但是当我删除特殊字符时,值正在被传递。

[HttpPost]
public responseObj Endpoint(requestObj request)

有什么想法吗?谢谢!

【问题讨论】:

标签: json asp.net-mvc-4 asp.net-web-api


【解决方案1】:

需要设置WebClient的Encoding

client.Encoding = Encoding.UTF8;

【讨论】:

    【解决方案2】:

    请看下面的代码。 注意:我没有使用 JsonConvert.SerializeObject,而是使用了 HttpClient 而不是 WebClient

        public static HttpRequestMessage CreateRequest(string requestUrl, HttpMethod method, String obj)
        {
            var request = new HttpRequestMessage
            {
                RequestUri = new Uri(requestUrl),
                Method = method,
                Content = new StringContent(obj, Encoding.UTF8, "application/json")
            };
    
         return request;
        }
        public static void DoAPI()
        {
            var client = new HttpClient();
            var obj = "{\"Firstname\":\"kyv®\",\"Lastname\":\"sab®\"}";
            var httpRequest = CreateRequest("mywebapiURL", HttpMethod.Post, obj);
            var response = client.SendAsync(httpRequest).Result;
            Console.WriteLine(response.Content.ReadAsStringAsync().Result);
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多