2017-06-23 47 views
2

我需要發送一些領域(從VB.Net應用程序)在字典中作爲JSON格式的Web服務。POST字典作爲JSON

下面是代碼:我試圖捕捉到上面的字符串,如下面的代碼

public ActionResult UpdateSQL(string Pram) 

我收到錯誤代碼500

Dim dict As New Dictionary(Of String, String) 
dict.Add("Drinks", "2") 
dict.Add("ID", "1") 
Dim parameters As String = JsonConvert.SerializeObject(dict) 
Dim jsonString As String = "{""Pram"":""" + parameters + """}" 
Dim Uri As New Uri(String.Format("http://***/WebServices/UpdateSQL")) 
Dim data = Encoding.Default.GetBytes(jsonString) 
Dim result_post As String = SendRequest(Uri, data, "application/json", "POST") 

在我的web服務(ASP.NET C#):內部服務器錯誤。我嘗試從VB應用程序傳遞單個字段,並且工作正常。下面是代碼,如果我給個別領域

Dim jsonString As String = "{""SQL"":""" + sSQL + """," & 
          """TableName"":""" + tableName + """," & 
          """Drinks"":""""2"",""ID"":""1""}" 

時所發送的作品精美絕倫,並在Web服務被捕獲如下代碼上面的JSON字符串:

public ActionResult UpdateSQL(string SQL, string TableName, string Drinks, string ID) 

只有當我序列解釋爲字符串,並嘗試發送,獲取內部服務器錯誤。 請告知,如果我缺少something.Thanks

+0

任何機會,您可以調試併發布完整的錯誤消息?另外,沒有理由在''''''''''''jsonString'中包裝''''參數,因爲它會被序列化爲一個完整的對象,而在你當前的版本中,它將是一個由字符串表示的對象 – Icepickle

+0

@Ipickle謝謝很多,你的建議做了訣竅,通過刪除「至少它現在觸及我的Web服務代碼。但是現在Pram收到「空」價值。以下是一些參考值: 參數:「{」「Drinks」「:」「2」「,」「ID」「:」「1」「}」 jsonString:「{」「Pram」「: {「」Drinks「」:「」2「」,「」ID「」:「」1「」}}「 在我的webservices中,Pram值爲空。你能否建議,可能是什麼問題。謝謝。 – Gaurav

+0

這並不奇怪,你正在發送一個json對象,它假定你正在期待一個屬性爲'Pram'的對象,其中包含一個屬性爲'SQL','TableName','Drinks'和'ID'的對象 – Icepickle

回答

2
Dim dict As New Dictionary(Of String, String) 
     dict.Add("Drinks", "2") 
     dict.Add("ID", "1") 
     Dim parameters As String = JsonConvert.SerializeObject(dict, Formatting.None) 
     Dim Uri As New Uri(String.Format("http://localhost:60627/home/test/")) 
     Dim webClient As New WebClient() 
     Dim resByte As Byte() 
     Dim resString As String 
     Dim reqString() As Byte 
     webClient.Headers("content-type") = "application/json" 
     Dim senddata As Object = JsonConvert.SerializeObject(New With {Key .param = parameters}).ToString() 
     reqString = Encoding.Default.GetBytes(senddata) 
     resByte = webClient.UploadData(Uri, "post", reqString) 
     resString = Encoding.Default.GetString(resByte) 

首先改變這種類型的Concatination 「{」 「嬰兒車」 「:」 「」 +參數+ 「」 「}」 爲它的讓一點困惑。

而不發送到服務器屬性的數據因爲問題是Escapse序列沒有給出Concat適當的序列化數據。

在上面我更改代碼對於

Dim parameters As String = JsonConvert.SerializeObject(dict, Formatting.None) 

它的更改數據

{ 「飲料」: 「2」, 「ID」: 「1」}

下一個系列化它改變了

{「param」 : 「{\」 飲料\ 「:\」 2 \」 \ 「ID \」:\ 「1 \」} 「}

但數據的發送Serlization是

{」參數 「:」{ 「飲料」: 「2」, 「ID」: 「1」}「

因此,數據不會發送正確 enter image description here

我經過妥善它的正常工作...

+0

非常感謝。這工作。我最近兩天掙扎着。 – Gaurav