2016-04-04 4 views
0

J'essaie d'appeler une API WebAPI2 à partir d'un ancien code VB.Comment appeler un WebAPI2 à partir de VB.NET

L'API fonctionne lorsqu'elle est appelée depuis fiddler ou depuis le client AngularJS.

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

Puis dans le code 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() 

je ne peux obtenir une réponse 415 de l'API. J'ai essayé d'autres types de contenu, mais avec le même résultat ou une erreur de serveur. Tout ce qui ne va pas avec cet appel semble être lié au bit de corps de Json, parce que si je n'envoie rien dans le corps de l'appel, le parentId arrive à l'API comme il est censé le faire.

+0

Vous définissez 'data' ... mais où' jsonDataBytes' est-il initialisé? –

+0

Je viens d'éditer. jsonDataBytes est le nom de la méthode de paramètre où l'appel est réellement fait. J'ai condensé le code en une version plus simple. – JBourne

+0

Vous avez 'webRequest.ContentLength = jsonDataBytes.Length' ... où' jsonDataBytes.Length' est-il défini? –

Répondre

0

Comme Chase Rocker mentionné, essayez d'abord en initialisant jsonDataBytes comme

Dim jsonDataBytes As Bytes() 

Vérifiez également l'objet JSON pour vous assurer qu'il est bien. Utilisez ce lien http://jsonlint.com/ ou pour une meilleure assistance, utilisez Fiddler à la place.