繁体   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