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.
Sie definieren 'data' ... aber wo wird' jsonDataBytes' initialisiert? –
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
Sie haben 'webRequest.ContentLength = jsonDataBytes.Length' ... wo wird' jsonDataBytes.Length' gesetzt? –