簡體   English   中英

C#Asana POST新任務返回錯誤400(錯誤請求)

[英]C# Asana POST new task returns error 400 (Bad request)

從我的應用程序在Asana中創建新任務時遇到問題。

發布方法:

protected static T Post<T>(string route, object action = null, object parameters = null) where T : BaseResult, new()
    {
        var result = new T();

        try
        {
            var actionUrl             = GetActionUrl(route, action);
            var request               = (HttpWebRequest)WebRequest.Create(actionUrl);
            request.Credentials       = CredentialCache.DefaultCredentials;
            request.Accept            = "application/json";
            request.Method            = WebRequestMethods.Http.Post;
            request.Proxy.Credentials = CredentialCache.DefaultCredentials;
            request.Headers.Add("Authorization: Bearer " + ApiKey);

            if (parameters != null)
            {
                var contentJSON       = JsonConvert.SerializeObject(parameters);
                request.ContentType   = "application/json";

                using (var s = request.GetRequestStream())
                    using (var sw = new StreamWriter(s, Encoding.UTF8))
                        sw.Write(contentJSON);
            }

            var response = (HttpWebResponse) request.GetResponse();

            using (var reader = new StreamReader(response.GetResponseStream()))
            {
                var data = reader.ReadToEnd();
                result   = JsonConvert.DeserializeObject<T>(data);
            }
        }
        catch (Exception ex)
        {
            result.IsOk    = false;
            result.Message = ex.GetMessage();
        }

        return result;
    }

操作網址: https: //app.asana.com/api/1.0/workspaces/ MyWorkspace / tasks JSON: {"data":{"name":"TestTask1","notes":"Test note","workspace":"*MyWorkspace*","assignee":"*MyAssignee"}}

但是Asana向我返回“遠程服務器返回錯誤:(400)錯誤的請求。”

如果將request.ContentType更改為“ application / x-www-form-urlencoded”,則不會出現任何錯誤,但是Asana會向我返回帶有空字段的新任務。

我接下來要解決的問題應該是什么?

謝謝

如果您使用的是ApiKey(而不是個人訪問令牌),我認為您的授權標頭應為

"Authorization: Basic " + EncodedAuthInfo

哪里

EncodedAuthInfo = Convert.ToBase64String(Encoding.Default.GetBytes(ApiKey + ":"))

請參閱如何使用c#連接到Asana Rest API? https://asana.com/developers/documentation/getting-started/auth中的“使用基本身份驗證”部分,以獲取有關使用基本身份驗證的詳細信息。

我對您所說的意思也感到困惑

JSON = {"data": {"name": "TestTask1"} ...

這是您期望的HTTP響應嗎?

無論如何,希望我概述的內容對您有所幫助。

我想我已經解決了阻礙您解決的問題。

想象一下您發布到的場景

https://app.asana.com/api/1.0/workspaces/123456/tasks

然后將參數傳遞給請求主體

"workspace":"789012"

Asana平台應如何處理這些數據? 您無意中兩次指定了帶有沖突數字的工作空間。 因此, 在命中URL中也包含工作空間ID的端點時您無法在數據中指定工作空間ID

關於這一點,文檔令人困惑,因為我們沒有澄清在請求正文中的URL中找到哪些參數以及在JSON中找到哪些參數。 我實際上很快就解決了! 如果確實是引起此問題的原因,很抱歉我們對此不清楚。

我個人認為,當且僅當工作空間與URL中的工作空間相同時,允許在參數數據中復制工作空間可能是更好的用戶體驗,但是現在,我們只是檢查一下是否只有一個值為工作區ID。 如果有多個,即使它們是相同的,我們也會返回400錯誤代碼。

您甚至可以考慮分析響應正文,即使有錯誤也可以。 在其中,我們嘗試提供有關請求錯誤之處的相當不錯的信息。 例如,當測試我對您的請求的預感時,我得到的是:

"errors":[{"message":"Duplicate field: workspace", ...}]

如果我們在發送回信息方面做得很好,希望您會發現它比Asana沙箱更有用! 如果這不是問題,請隨時發表評論; 我很樂意進一步探討這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM