2010-08-20 58 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