C# 通过API向asana发布任务已停止工作

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";

我写了一个程序,通过API将任务发布到asana,直到今天早上它一直工作正常,有人能帮我弄清楚为什么会这样吗

这是我正在发送的JSON字符串的一个示例:

{“工作区”: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不那么“令人惊讶”,我们希望对可以忽略的参数进行明确和严格的规定,否则可能会产生误导