通过WebClient上传JSON

我有一个Web应用程序,它使用JQuery与我的后端进行交互。 后端成功接受JSON数据。 例如,我可以成功发送以下JSON:

{ "id":1, "firstName":"John", "lastName":"Smith" } 

我现在有一个必须打到这个后端的Windows Phone应用程序。 我需要通过WebClient传递相同的JSON。 目前我有以下内容,但我不确定如何实际传递JSON。

 string address = "http://www.mydomain.com/myEndpoint; WebClient myService = new WebClient(); utilityService.UploadStringCompleted += new UploadStringCompletedEventHandler(utilityService_UploadStringCompleted); utilityService.UploadStringAsync(address, string.Empty); 

有人能告诉我我需要做什么吗?

虽然问题已经得到解答,但我认为根据WebClient分享我的简单JsonService会很好:

基类

 ///  /// Class BaseJsonService. ///  public abstract class BaseJsonService { ///  /// The client ///  protected WebClient client; ///  /// Gets the specified URL. ///  /// The type of the attribute response. /// The URL. /// The configuration complete. /// The configuration error. public abstract void Get(string url, Action onComplete, Action onError); ///  /// Sends the specified URL. ///  /// The type of the attribute response. /// The URL. /// The json data. /// The configuration complete. /// The configuration error. public abstract void Post(string url, string jsonData, Action onComplete, Action onError); } 

服务实施

 ///  /// Class JsonService. ///  public class JsonService : BaseJsonService { ///  /// Gets the specified URL. ///  /// The type of the attribute response. /// The URL. /// The configuration complete. /// The configuration error. public override void Get(string url, Action onComplete, Action onError) { if (client == null) client = new WebClient(); client.DownloadStringCompleted += (s, e) => { TResponse returnValue = default(TResponse); try { returnValue = JsonConvert.DeserializeObject(e.Result); onComplete(returnValue); } catch (Exception ex) { onError(new JsonParseException(ex)); } }; client.Headers.Add(HttpRequestHeader.Accept, "application/json"); client.Encoding = System.Text.Encoding.UTF8; client.DownloadStringAsync(new Uri(url)); } ///  /// Posts the specified URL. ///  /// The type of the attribute response. /// The URL. /// The json data. /// The configuration complete. /// The configuration error. public override void Post(string url, string jsonData, Action onComplete, Action onError) { if (client == null) client = new WebClient(); client.UploadDataCompleted += (s, e) => { if (e.Error == null && e.Result != null) { TResponse returnValue = default(TResponse); try { string response = Encoding.UTF8.GetString(e.Result); returnValue = JsonConvert.DeserializeObject(response); } catch (Exception ex) { onError(new JsonParseException(ex)); } onComplete(returnValue); } else onError(e.Error); }; client.Headers.Add(HttpRequestHeader.ContentType, "application/json"); client.Encoding = System.Text.Encoding.UTF8; byte[] data = Encoding.UTF8.GetBytes(jsonData); client.UploadDataAsync(new Uri(url), "POST", data); } } 

用法示例

  ///  /// Determines whether this instance [can get result from service]. ///  [Test] public void CanGetResultFromService() { string url = "http://httpbin.org/ip"; Ip result; service.Get(url, success => { result = success; }, error => { Debug.WriteLine(error.Message); }); Thread.Sleep(5000); } ///  /// Determines whether this instance [can post result automatic service]. ///  [Test] public void CanPostResultToService() { string url = "http://httpbin.org/post"; string data = "{\"test\":\"hoi\"}"; HttpBinResponse result = null; service.Post(url, data, response => { result = response; }, error => { Debug.WriteLine(error.Message); }); Thread.Sleep(5000); } } public class Ip { public string Origin { get; set; } } public class HttpBinResponse { public string Url { get; set; } public string Origin { get; set; } public Headers Headers { get; set; } public object Json { get; set; } public string Data { get; set; } } public class Headers { public string Connection { get; set; } [JsonProperty("Content-Type")] public string ContentType { get; set; } public string Host { get; set; } [JsonProperty("Content-Length")] public string ContentLength { get; set; } } 

只是为了分享一些知识!

祝好运!

弄清楚了。 我忘记了以下内容:

 myService.Headers.Add("Content-Type", "application/json");