2017-03-14 1 views
0

Je crée une classe api conroller dans VB. J'ai une fonction très simple en elle:Test API Post en passant une classe <Frombody()> - Toujours NULL

Public Function Post(<FromBody()> ByVal value As String) As String 
    Return value 
End Function 

Lorsque j'envoie une requête POST de HTTP outil (extension FireFox), je peux le voir aller dans la fonction, mais value est toujours vide.

J'ai dans mon WebApiConfig.vb:

config.Routes.MapHttpRoute(
     name:="Names", 
     routeTemplate:="{controller}/{id}", 
     defaults:=New With {.id = RouteParameter.Optional} 

Et ceci dans Global.ASAX.vb sous Application-Start():

RouteTable.Routes.MapHttpRoute(name:="Post", routeTemplate:="post", defaults:=New With {.symbol = RouteParameter.Optional, .controller = "Names"}) 

J'ai essayé de Fiddler 4 aussi bien, mais je reçois:

{"Message": "La requête contient une entité b ody mais pas Content-Type header. Le type de média inféré 'application/octet-stream' n'est pas pris en charge pour cette ressource. "," ExceptionMessage ":" No MediaTypeFormatter est disponible pour lire un objet de type 'String' du contenu avec le type de média 'application/octet-stream '. "," ExceptionType ":" System.Net.Http.UnsupportedMediaTypeException "," StackTrace ":" à System.Net.Http.HttpContentExtensions.ReadAsAsync [T] (HttpContent contenu, Type de type, IEnumerable " 1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken) \ r \ n à System.Web.Http.ModelBinding.FormatterParameterBinding.ReadContentAsync (HttpRequestMessage demande, type de type 1 de formatage IEnumerable », IFormatterLogger formatterLogger, CancellationToken cancellationToken) "}

Ou lorsque je tente de définir le type de contenu dans l'en-tête que je reçois:

Pas MediaTypeFormatter est disponible pour lire un objet de type « String » de contenu avec type de média ...

< Où est le type de média que j'ai défini.

Comment effectuer ce simple test POST?

Répondre

0

Il semble que le framework que vous utilisez pour votre API ne sache pas comment analyser le contenu du corps de votre requête POST en fonction de l'en-tête de type de contenu que vous définissez dans votre requête. En outre, votre API controller may not know how to parse plain text.

Vous pouvez ajouter manuellement un type de contenu pris en charge ou lire manuellement le contenu de la demande en fonction de l'une des réponses dans le lien ci-dessus. Ou vous pouvez changer votre contrôleur à accept a form post like so.

+0

C'est probablement une réponse assez décente à la question. Cependant, je suis allé un chemin différent et ne peut pas vraiment justifier le temps de re-tester cela avec la réponse fournie. J'espère que quelqu'un d'autre trouve cela utile. – Jeroen