c# Asana POST新任务返回错误400(错误请求)

本文关键字:错误 请求 返回 Asana POST 新任务 | 更新日期: 2023-09-27 18:02:24

我有一个问题,在Asana从我的应用程序创建新的任务。

Post方法:

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

动作URL: https://app.asana.com/api/1.0/workspaces/MyWorkspace/tasksJSON: {"data":{"name":"TestTask1","notes":"Test note","workspace":"*MyWorkspace*","assignee":"*MyAssignee"}}

但是Asana返回给我"远程服务器返回了一个错误:(400)错误的请求。"

如果我更改请求。内容类型到"application/x-www-form-urlencoded",我没有得到错误,但是Asana返回给我一个空字段的新任务。

我接下来要解决的问题应该是什么?

谢谢

c# Asana POST新任务返回错误400(错误请求)

如果您正在使用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平台应该如何处理这些数据?您无意中两次指定了具有冲突数字的工作空间。由于这个原因,你不能指定数据中的工作空间id,当到达一个在URL中也包含工作空间id的端点时。

文档在这一点上令人困惑,因为我们没有澄清哪些参数在URL中找到,哪些参数在请求体中的JSON中找到。我很快就会修好它!如果这确实是导致问题的原因,我很抱歉我们没有弄清楚这一点。

我个人认为,当且仅当工作空间与URL中的工作空间相同时,允许在参数数据中复制工作空间可能是更好的用户体验,但是现在,我们只是检查工作空间id是否只有一个值。如果有多于一个,即使它们是相同的,我们返回400错误码。

您可以考虑解析响应体,即使在错误时也是如此。在其中,我们试图提供相当体面的信息,说明请求的错误之处。例如,当测试我对您的请求的预感时,我得到的结果是:

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

如果我们在发送信息方面做得很好,我希望你会发现这比Asana沙盒更有用!如果这不是问题,请随意发表评论;我很乐意深入探讨这个问题