C# 使用C中的API将任务发布到Asana#
我试图找出如何在asana中向用户发布新任务,但我一直得到400个错误代码。谁能告诉我我做错了什么 这就是我到目前为止所做的: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();
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转换器,谁能告诉我我做错了什么:(