2015-01-28 4 views
0

API를 통해 아사 나에 작업을 게시하는 프로그램을 작성했으며 오늘 아침까지 아무런 문제가없는 것으로 알고 있습니다. API를 통해 아사나에 게시 작업을 수행하지 못했습니다.

내가 보내는 오전 JSON 문자열의 예입니다

{"workspace":09876543321111,"data": {"assignee":null,"name":"Sample Name","notes":"Sample Noted","due_on":"2015-01-27","projects":"12434567889099","completed":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);        
} 

포스트 기능 :

string data = "{\"data\": " + json + "}"; 
: I가 문자열 데이터를 변경하여 문제를 해결 관심이 누구를위한

//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); 
    } 
} 

편집

답변

0

우리는 (거의) 모든 API 경로가 "데이터"속성에서 전달 된 매개 변수만을 사용하므로 최상위 레벨에서 예상치 못한 매개 변수가 전달되면 400 오류를 반환하도록 변경했습니다. 이 경우 (올바르게 결정한 것처럼) 최상위 수준의 "작업 영역"특성이 올바르지 않습니다. 이전에는 무시했지만 API를 "놀랍지 않게"만들려고 노력하면서 매개 변수에 대해 명시적이고 엄격하게 지정하려고했습니다. 무시해야합니다. 그렇지 않으면 오해의 소지가 있습니다.

+0

오케이 이전에 효과가 있었는지 확인해 주셔서 감사합니다. – Ira