【问题标题】:Unable to get past the 400 Error无法通过 400 错误
【发布时间】:2018-08-26 18:56:33
【问题描述】:

创建新用户的代码:

function New-DropBoxUser {
    [CmdletBinding()]
    Param(
        [Parameter(Mandatory=$true, ValueFromPipeline=$true, Position=0)] 
        [string]$FullName
    )

    # Split name into username #
    $FirstName, $LastName = $FullName.split(' ')
    $UserName = ($FirstName[0]+$LastName).toLower()
    $email = "$UserName@mycomp.com"

    $Body = @{
        "new_members" = @(@{
            "member_email" = $email;
            "member_given_name" = $FirstName;                        
            "member_surname" = $LastName;
            "send_welcome_email" = "true";
            "role" = @{
                ".tag" = "member_only"
            }
        })
    }

    Write-Host ''
    Write-Host 'Creating DropBox User...' -ForegroundColor 'Yellow' -BackgroundColor 'Black'
    $AuthToken = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
    $token = "Bearer $AuthToken" 

    $response = Invoke-RestMethod `
        -Method Post `
        -Uri "https://api.dropboxapi.com/2/team/members/add" `
        -Headers @{ Authorization = $token } `
        -ContentType "application/json; charset=utf-8" `
        -Body (ConvertTo-Json $Body)
}

输出:

Invoke-RestMethod : 远程服务器返回错误:(400) Bad Request。

任何人,请告诉我解决方法。我尝试使用相同的$token 端点“团队/成员/列表”来获取用户列表,它可以工作。 我对 Dropbox API 完全陌生,所以我的代码是从 Google 借来的,虽然我很擅长 PowerShell,但我尝试使用许多不同的代码进行修补,但都没有奏效。

【问题讨论】:

  • 错误消息可能包含有关您做错了什么的提示。我建议您通过将-ErrorVariable irmError 添加到Invoke-RestMethod 调用来捕获变量中的错误,然后再查看$irmError
  • @MathiasR.Jessen,我尝试了 -ErrorVariable 但变量没有数据。此错误未捕获。
  • Invoke-RestMethod ` -Method Post ` -Uri "api.dropboxapi.com/2/team/members/add" ` -Headers @{ Authorization = $token } ` -ContentType "application/json; charset=utf-8" ` -Body (ConvertTo-Json $Body) ` -ErrorVariable $ero Write-Host $ero
  • 试过try catch也捕捉异常,
  • 尝试 { Invoke-RestMethod ` -Method Post ` -Uri "api.dropboxapi.com/2/team/members/add" ` -Headers @{ Authorization = $token } ` -ContentType "application/json; charset=utf-8" ` -Body (ConvertTo-Json $Body) ` -ErrorVariable $ero ` -ErrorAction Stop Write-Host $ero } catch {$ErrorMessage = $_.Exception.Message Write-Host $ErrorMessage}

标签: api powershell dropbox


【解决方案1】:

当一切都失败时,RTFM,其参数说:

{
    "new_members": [
        {
            "member_email": "tom.s@company.com",
            "member_given_name": "Tom",
            "member_surname": "Silverstone",
            "member_external_id": "company_id:342432",
            "send_welcome_email": true,
            "role": "member_only"
        }
    ],
    "force_async": false
}

尝试从role 定义中删除.tag 并将"true" 替换为$true

$Body = @{
    "new_members" = @(@{
        "member_email" = $email
        "member_given_name" = $FirstName                        
        "member_surname" = $LastName
        "send_welcome_email" = $true
        "role" = "member_only"
    })
}

【讨论】:

  • 已在 $true 中针对原生 powershell 布尔类型进行了编辑。
  • 已经尝试过"send_welcome_email = $true 但代码失败,但在更改角色并删除.tag 后它可以工作。
  • 我相信$true 是正确的语法。在这种情况下,生成的 JSON 是 : true,而 "true" 产生 : "true"
猜你喜欢
  • 2021-05-01
  • 1970-01-01
  • 2012-02-19
  • 1970-01-01
  • 2021-07-19
  • 2022-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多