2016-04-04 5 views
0

Я пытаюсь вызвать WebAPI2 api из старого кода VB.Как вызвать WebAPI2 из VB.NET

API работает при вызове от скрипача или от клиента AngularJS.

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

Затем в коде VB:

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() 

я могу получить только 415 ответа от API. Я также пробовал другие типы контента, но с тем же результатом или ошибкой сервера.

Что-то не так в этом вызове, похоже, связано с битом тела Json, потому что, если я не посылаю ничего в теле вызова, parentId получает API, как предполагается.

+0

Вы определяете 'data' ... но где инициализируется' jsonDataBytes'? –

+0

Я только что отредактировал. jsonDataBytes - это имя метода параметра, в котором фактически выполняется вызов. Я сконструировал код в более простой версии. – JBourne

+0

У вас есть 'webRequest.ContentLength = jsonDataBytes.Length' ... где установлена' jsonDataBytes.Length'? –

ответ

0

Как уже упоминалось Chase Rocker, попробуйте сначала инициализирующих jsonDataBytes, как

Dim jsonDataBytes As Bytes() 

Также проверьте объект JSON, чтобы убедиться, что это хорошо. Используйте эту ссылку http://jsonlint.com/ или для лучшей помощи используйте вместо этого Fiddler .