gpt4 book ai didi

c# - 通过 WebClient 上传 JSON

转载 作者:太空狗 更新时间:2023-10-29 18:03:29 26 4
gpt4 key购买 nike

我有一个 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 会很好:

基类

/// <summary>
/// Class BaseJsonService.
/// </summary>
public abstract class BaseJsonService
{
/// <summary>
/// The client
/// </summary>
protected WebClient client;

/// <summary>
/// Gets the specified URL.
/// </summary>
/// <typeparam name="TResponse">The type of the attribute response.</typeparam>
/// <param name="url">The URL.</param>
/// <param name="onComplete">The configuration complete.</param>
/// <param name="onError">The configuration error.</param>
public abstract void Get<TResponse>(string url, Action<TResponse> onComplete, Action<Exception> onError);
/// <summary>
/// Sends the specified URL.
/// </summary>
/// <typeparam name="TResponse">The type of the attribute response.</typeparam>
/// <param name="url">The URL.</param>
/// <param name="jsonData">The json data.</param>
/// <param name="onComplete">The configuration complete.</param>
/// <param name="onError">The configuration error.</param>
public abstract void Post<TResponse>(string url, string jsonData, Action<TResponse> onComplete, Action<Exception> onError);
}

服务实现

/// <summary>
/// Class JsonService.
/// </summary>
public class JsonService : BaseJsonService
{
/// <summary>
/// Gets the specified URL.
/// </summary>
/// <typeparam name="TResponse">The type of the attribute response.</typeparam>
/// <param name="url">The URL.</param>
/// <param name="onComplete">The configuration complete.</param>
/// <param name="onError">The configuration error.</param>
public override void Get<TResponse>(string url, Action<TResponse> onComplete, Action<Exception> onError)
{
if (client == null)
client = new WebClient();

client.DownloadStringCompleted += (s, e) =>
{
TResponse returnValue = default(TResponse);

try
{
returnValue = JsonConvert.DeserializeObject<TResponse>(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));
}
/// <summary>
/// Posts the specified URL.
/// </summary>
/// <typeparam name="TResponse">The type of the attribute response.</typeparam>
/// <param name="url">The URL.</param>
/// <param name="jsonData">The json data.</param>
/// <param name="onComplete">The configuration complete.</param>
/// <param name="onError">The configuration error.</param>
public override void Post<TResponse>(string url, string jsonData, Action<TResponse> onComplete, Action<Exception> 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<TResponse>(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);
}
}

示例用法

    /// <summary>
/// Determines whether this instance [can get result from service].
/// </summary>
[Test]
public void CanGetResultFromService()
{
string url = "http://httpbin.org/ip";
Ip result;

service.Get<Ip>(url,
success =>
{
result = success;
},
error =>
{
Debug.WriteLine(error.Message);
});

Thread.Sleep(5000);
}
/// <summary>
/// Determines whether this instance [can post result automatic service].
/// </summary>
[Test]
public void CanPostResultToService()
{
string url = "http://httpbin.org/post";
string data = "{\"test\":\"hoi\"}";
HttpBinResponse result = null;

service.Post<HttpBinResponse>(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; }
}

只是为了分享一些知识!

祝你好运!

关于c# - 通过 WebClient 上传 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11081760/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com