Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.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# 使用C中的API将任务发布到Asana#_C#_Asana - Fatal编程技术网

C# 使用C中的API将任务发布到Asana#

C# 使用C中的API将任务发布到Asana#,c#,asana,C#,Asana,我试图找出如何在asana中向用户发布新任务,但我一直得到400个错误代码。谁能告诉我我做错了什么 这就是我到目前为止所做的: string apiKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; string ID = "xxxxxxxxxxxxx"; string url = @"https://app.asana.com/api/1.0/tasks"; Data dat = new Data();

我试图找出如何在asana中向用户发布新任务,但我一直得到400个错误代码。谁能告诉我我做错了什么

这就是我到目前为止所做的:

        string apiKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
        string ID = "xxxxxxxxxxxxx";
        string url = @"https://app.asana.com/api/1.0/tasks";

        Data dat = new Data();
        dat.workspace = ID;
        dat.name = "Buy eggs";
        dat.notes = "Testing";
        string json = JsonConvert.SerializeObject(dat);
        string data ="\"data\": " + json;

        byte[] bytes = Encoding.UTF8.GetBytes(data);
        var req = (HttpWebRequest)WebRequest.Create(url);
        Console.WriteLine(bytes.ToString());
        req.Method = WebRequestMethods.Http.Post; 
        req.ContentLength = bytes.Length;
        req.ContentType = "application/json";

        var authInfo = apiKey + ":";
        var encodedAuthInfo = Convert.ToBase64String(
            Encoding.Default.GetBytes(authInfo));
        req.Headers.Add("Authorization", "Basic " + encodedAuthInfo);

        req.ContentLength = bytes.Length;
        Stream reqStream = req.GetRequestStream();
        reqStream.Write(bytes, 0, bytes.Length);
        reqStream.Close();

        try
        {
            HttpWebResponse response = (HttpWebResponse)req.GetResponse();
            string res = new StreamReader(response.GetResponseStream()).ReadToEnd();
            Console.WriteLine(res);
            Console.ReadLine();
        }
        catch (WebException ex)
        {
            HttpWebResponse response = ((HttpWebResponse)ex.Response);
            string e = url + " caused a " + (int)response.StatusCode + " error.\n" + response.StatusDescription;
            Console.WriteLine(e);
            Console.ReadLine();
        }

我放了串行转换器,我做错了吗?

正如第一条评论所指出的,您需要正确地序列化数据。发布的最终正文应类似于:

{ "data": { "name": "My Example Task", ... }}

(当然,除了用更多的字段替换
之外。)

我研究了很长一段时间,发现下面的代码很有用,也很有用。我可以通过我的申请成功地将任务发布到Asana。我已经为dotnet使用了Json序列化程序。感谢Newtonsoft.Json

        string json = null;
        byte[] bytes = null;
        string url = "https://app.asana.com/api/1.0/tasks";
        HttpWebRequest req = default(HttpWebRequest);
        Stream reqStream = default(Stream);
        string authInfo = null;
        Task TaskData = new Task();

        try
        {
            authInfo = apiKey + Convert.ToString(":");

            TaskData.workspace = WorkspaceId;
            TaskData.name = TaskName;
            TaskData.notes = TaskNotes;

            json = JsonConvert.SerializeObject(TaskData);
            json = json.Insert((json.Length - 1), ",\"projects\":[" + ProjectId + "]");
            json = Convert.ToString("{ \"data\":") + json + "}";

            bytes = Encoding.UTF8.GetBytes(json);

            req = (HttpWebRequest)WebRequest.Create(url);
            req.Method = WebRequestMethods.Http.Post;
            req.ContentType = "application/json";
            req.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.Default.GetBytes(authInfo)));
            req.ContentLength = bytes.Length;

            reqStream = req.GetRequestStream();
            reqStream.Write(bytes, 0, bytes.Length);
            reqStream.Close();


            HttpWebResponse response = (HttpWebResponse)req.GetResponse();
            string res = new StreamReader(response.GetResponseStream()).ReadToEnd();
            Console.WriteLine(res);
            Console.ReadLine();

            string finalString = res.Remove(0, 8);
            finalString = finalString.Remove((finalString.Length - 1));
            AsanaObjectId newtask = JsonConvert.DeserializeObject<AsanaObjectId>(finalString);

            return newtask;

        }
        catch (WebException ex)
        {
            HttpWebResponse response = (HttpWebResponse)ex.Response;
            string resp = new StreamReader(ex.Response.GetResponseStream()).ReadToEnd();
            MessageBox.Show(resp);
            System.Environment.Exit(0);
        }
string json=null;
字节[]字节=null;
字符串url=”https://app.asana.com/api/1.0/tasks";
HttpWebRequest req=默认值(HttpWebRequest);
Stream reqStream=默认值(Stream);
字符串authInfo=null;
Task TaskData=新任务();
尝试
{
authInfo=apiKey+Convert.ToString(“:”);
TaskData.workspace=工作空间ID;
TaskData.name=任务名称;
TaskData.notes=任务注释;
json=JsonConvert.SerializeObject(TaskData);
json=json.Insert((json.Length-1),“,\“projects\”:[“+ProjectId+”]);
json=Convert.ToString(“{\”数据\“:”)+json+“}”;
字节=Encoding.UTF8.GetBytes(json);
req=(HttpWebRequest)WebRequest.Create(url);
req.Method=WebRequestMethods.Http.Post;
req.ContentType=“应用程序/json”;
添加(“授权”、“基本”+Convert.ToBase64String(Encoding.Default.GetBytes(authInfo));
req.ContentLength=字节.Length;
reqStream=req.GetRequestStream();
请求流写入(字节,0,字节长度);
reqStream.Close();
HttpWebResponse响应=(HttpWebResponse)req.GetResponse();
string res=new StreamReader(response.GetResponseStream()).ReadToEnd();
控制台写入线(res);
Console.ReadLine();
字符串finalString=res.Remove(0,8);
finalString=finalString.Remove((finalString.Length-1));
AsanaObjectId newtask=JsonConvert.DeserializeObject(finalString);
返回新任务;
}
捕获(WebException ex)
{
HttpWebResponse=(HttpWebResponse)ex.response;
string resp=newstreamreader(例如Response.GetResponseStream()).ReadToEnd();
MessageBox.Show(resp);
系统环境退出(0);
}

您的
数据
不是有效的json字符串。不要试图手动形成它,使用一个真正的json解析器,比如json.Net。为什么不使用newtonsoft将数据转换为json而不是手动呢?对不起,我对编程很陌生,我该怎么做呢?你可以先搜索
json.Net
并阅读文档……我尝试使用json转换器,谁能告诉我我做错了什么:(