Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 发布JSON的简单Windows8WebRequest_C#_.net_Windows_Windows 8_Windows Store - Fatal编程技术网

C# 发布JSON的简单Windows8WebRequest

C# 发布JSON的简单Windows8WebRequest,c#,.net,windows,windows-8,windows-store,C#,.net,Windows,Windows 8,Windows Store,我试图编写一个包含异步函数的类,以使对特定api的webrequests更简单。为了给您一个我的目标示例,我希望能够编写如下所示的代码: private void btnLogin_Click(object sender, RoutedEventArgs e) { // Validate Login Details... // Save login details to xml file if user asks... JsonObject

我试图编写一个包含异步函数的类,以使对特定api的webrequests更简单。为了给您一个我的目标示例,我希望能够编写如下所示的代码:

private void btnLogin_Click(object sender, RoutedEventArgs e)
    {
        // Validate Login Details...
        // Save login details to xml file if user asks...
        JsonObject authSuccess = await myClass.authenticate(username, password); // NOTE JSON WILL BE THE RESPONSE FROM SERVER SO JSONOBJECT SEEMS LOGICAL BUT MAY BE EASIER WAY?
        if (authSuccess){
          // Go to next part of app...
        }else{
          // Show error
        }
    }
private void btnDelete_Click(object sender, RoutedEventArgs e)
    {
        JsonObject deleteSuccess= await myClass.deleteSomeData(type, data); // NOTE JSON WILL BE THE RESPONSE FROM SERVER SO JSONOBJECT SEEMS LOGICAL BUT MAY BE EASIER WAY?
        if (deleteSuccess){
          // Go to next part of app...
        }else{
          // Show error
        }
    }
myClass看起来像:

namespace myApp
{
    public class myClass 
    {
        public async Task<Boolean> authenticate(String username, String apikey)
        {
            var resp = await PostAsync("http://url", "{\"auth\":{\"passwordCredentials\":{\"username\":\"demouser\",\"password\":\"mypass\"}}}");

            return true;
        }

public async Task<Boolean> deleteSomeData(String type, String data)
        {
            var resp = await PostAsync("http://url", "{\"delete\":{\"type\":{\"type\":\"type\",\"data\":\"data\"}}}");

            return true;
        }

        private async Task<JsonObject> PostAsync(string uri, string data)
        {
            JsonSerializer js = new JsonSerializer();

            var httpClient = new HttpClient();

            var response = await httpClient.PostAsync(uri, new JsonObject());

            response.EnsureSuccessStatusCode();

            string content = await response.Content.ReadAsStringAsync();
            return await Task.Run(() => JsonObject.Parse(content));
        }
    }
}
我需要知道是否有一个简单的方法来做到这一点?我需要能够在我的应用程序中的任何地方调用该类,使用PUT、GET、POST、DELETE和发送JSON数据与服务器通信,并且能够发送自定义标题并设置我自己的内容类型

我将始终需要能够以json或xml的形式读取和解析来自服务器的响应

有人帮忙吗


上面的许多代码可能是错误的。

我通过使用一组扩展方法实现了这一点;沿着

    public static bool UpdateItem<TItem>(this HttpClient httpClient, TItem item, string uriBase, string actionName) where TItem : class
    {
        var response = await httpClient.PutAsJsonAsync(string.Format(uriBase, actionName), item);

        response.EnsureSuccessStatusCode();
        .
        .
        .

        return success;
    }

你有扩展方法的副本吗?不幸的是,它们是保密的;他们没有使用async/await,所以您仍然需要进行大量的返工。但是这个概念相对简单,多亏了扩展方法的思想。您能帮助我们如何使用httpclient发送json post请求并指定头吗?