C# 通过API向asana发布任务已停止工作
我写了一个程序,通过API将任务发布到asana,直到今天早上它一直工作正常,有人能帮我弄清楚为什么会这样吗 这是我正在发送的JSON字符串的一个示例:C# 通过API向asana发布任务已停止工作,c#,api,http,asana,C#,Api,Http,Asana,我写了一个程序,通过API将任务发布到asana,直到今天早上它一直工作正常,有人能帮我弄清楚为什么会这样吗 这是我正在发送的JSON字符串的一个示例: {“工作区”:09876543321111,“数据”:{“受让人”:null,“姓名”:“样本名称”,“备注”:“样本已注明”,“到期日期”:“2015-01-27”,“项目”:“12434567889099”,“已完成”:false} 我得到一个400错误:错误的请求 这是我的代码: string ID = "09876543321111";
{“工作区”:09876543321111,“数据”:{“受让人”:null,“姓名”:“样本名称”,“备注”:“样本已注明”,“到期日期”:“2015-01-27”,“项目”:“12434567889099”,“已完成”:false}
我得到一个400错误:错误的请求
这是我的代码:
string ID = "09876543321111"; //workspace ID
string url = @"https://app.asana.com/api/1.0/workspaces/" + ID + @"/tasks";
Data dat = new Data();
string ProjName = "Test Project";
dat.projects = "1234567890234";
dat.assignee = null;
dat.name = "Sample Name";
dat.notes = "Sample Notes";
dat.due_on = val.requiredBy.Value.ToString("u").Substring(0, 10);
dat.completed = false;
//if task doesnt exist, make one
if (!Tasks.CheckExist(project, dat.projects, dat.name, apiKey, log))
{
string json = JsonConvert.SerializeObject(dat);
string data = "{\"workspace\":" + ID + ",\"data\": " + json + "}";
log.WriteLine(data);
Functions.Post(data, url, apiKey, log);
}
职位职能:
//post tasks to asana
public static void Post(string data, string url, string apiKey, StreamWriter log)
{
byte[] bytes = Encoding.UTF8.GetBytes(data);
var req = (HttpWebRequest)WebRequest.Create(url);
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();
}
catch (WebException ex)
{
HttpWebResponse response = ((HttpWebResponse)ex.Response);
string exc = url + " caused a " + (int)response.StatusCode + " error.\n" + response.StatusDescription;
Console.WriteLine(exc);
log.WriteLine(exc);
}
}
编辑
对于关心这个问题的人,我通过将字符串数据更改为:
string data = "{\"data\": " + json + "}";
我们最近做了一个更改,如果在顶层传递了意外的参数,则返回400错误,因为(几乎)所有API路由都只使用在“data”属性下传递的参数。在这种情况下(正如您正确确定的那样),顶层的“workspace”属性是不正确的——之前我们只是忽略了它,但为了使API不那么“令人惊讶”,我们希望对可以忽略的参数进行明确和严格的规定,否则可能会产生误导