2010-08-20 37 views
2

我正在使用PowerShell脚本将json数据发布到REST接口,并且每次都会收到(400)错误的请求。我对此很陌生,对于是否应该对数据进行编码还不清楚。我知道我需要将contenttype设置为application/json,但是我正在使用导致我的问题的编码选择,如果是这样,我应该使用什么?如何通过Net.WebRequest正确发送json数据 - PowerShell

$cred = New-Object System.Net.NetworkCredential -ArgumentList $authUser,$authPass 
$url = 'http://localhost:8080/alfresco/service/api/people' 
$request = [Net.WebRequest]::Create($url) 

$request.ServicePoint.Expect100Continue = $false 

$request.Credentials = $cred 
$request.ContentType = "application/json" 
$request.Method = "POST" 

$data = (New-Object PSObject | 
    Add-Member -PassThru NoteProperty username $username | 
    Add-Member -PassThru NoteProperty firstName $firstname | 
    Add-Member -PassThru NoteProperty lastName $lastname | 
    Add-Member -PassThru NoteProperty email $email | 
    Add-Member -PassThru NoteProperty password $password 
) | ConvertTo-JSON 

$bytes = [System.Text.Encoding]::ASCII.GetBytes($data) 

$request.ContentLength = $bytes.Length 

$requestStream = [System.IO.Stream]$request.GetRequestStream() 
$requestStream.write($bytes, 0, $bytes.Length) 

$response = $request.GetResponse() 

回答

1

$requestStream.Write()放在一个$requestStream.Close(),看是否将数据刷新到服务器之后。

+0

无论是否有$ requestStream.Close()我得到以下错误: 异常调用带有“0”参数的“GetResponse”:“远程服务器返回一个错误:(400)错误的请求。 “ at:line:56 char:34 + \t \t $ response = $ request.GetResponse <<<<() 这就是导致我相信它与编码有关,但我可以完全错误。 – Kris 2010-08-23 17:11:07

+0

您可以将调用的输出发布到ConvertTo-Json以确保您发送的是valdi JSON吗? – 2010-08-23 20:07:58

+0

数据变量输出这个 { “电子邮件”: “[email protected]”, “名字”: “克里斯”, “姓氏”: “测试”, “密码”: “test123”, “用户名”:“kristest” } – Kris 2010-08-25 21:15:32