2016-04-04 36 views
0

Ich versuche, eine WebAPI2 API aus einem älteren VB-Code aufzurufen.So rufen Sie eine WebAPI2 von VB.NET

Die API funktioniert, wenn sie von fiddler oder vom AngularJS-Client aufgerufen wird.

[Route("CreateMyObject")] 
[HttpPost] 
public async Task<JsonResult<MyObject>> CreateMyObject([FromUri] int parentId, [FromBody] MyObject object) 

Dann in dem VB-Code:

Dim apiUri As New Uri(apiUrl & "api/CreateMyObject?parentId=" & 
intParentId.ToString()) 
Dim data = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(myObjectInstance)) 
Dim webRequest As WebRequest = WebRequest.Create(uri) 
webRequest.ContentType = "application/json" 
webRequest.Method = "POST" 

webRequest.ContentLength = data.Length 
Dim stream = webRequest.GetRequestStream() 
stream.Write(data, 0, data.Length) 
stream.Close() 

Dim response = webRequest.GetResponse().GetResponseStream() 
Dim reader As New StreamReader(response) 
Dim res = reader.ReadToEnd() 
reader.Close() 
response.Close() 

Ich kann nur eine 415-Antwort von der API erhalten. Ich habe auch andere Content-Typen ausprobiert, aber mit dem gleichen Ergebnis oder Serverfehler.

Was mit diesem Aufruf falsch ist, scheint mit dem JSon-Body-Bit in Verbindung zu stehen, denn wenn ich nichts im Call-Body sende, gelangt die parentId zur API, wie sie soll.

+0

Sie definieren 'data' ... aber wo wird' jsonDataBytes' initialisiert? –

+0

Ich habe gerade bearbeitet. jsonDataBytes ist der Name der Parametermethode, bei der der Aufruf tatsächlich ausgeführt wird. Ich verdichtete den Code in eine einfachere Version. – JBourne

+0

Sie haben 'webRequest.ContentLength = jsonDataBytes.Length' ... wo wird' jsonDataBytes.Length' gesetzt? –

Antwort

0

Wie Chase Rocker erwähnt, versuchen Sie zunächst durch Initialisieren jsonDataBytes als

Dim jsonDataBytes As Bytes() 

Auch das JSON-Objekt überprüfen, um sicherzustellen, es ist in Ordnung. Verwenden Sie diesen Link http://jsonlint.com/ oder für bessere Unterstützung verwenden Sie stattdessen Fiddler .

Verwandte Themen