2017-03-14 1 views
0

私はVBでapi conrollerクラスを作成しています。Testing API投稿を渡す<Frombody()>クラス - 常にNULL

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

私はHTTPツール(Firefoxの拡張機能)からのPOSTリクエストを送信し、私はそれが機能して行く見ることができますが、valueは常に空です:私はそれに非常に単純な機能を持っています。

私はWebApiConfig.vbでこれを持っている:

Application-Start()Global.ASAX.vb
config.Routes.MapHttpRoute(
     name:="Names", 
     routeTemplate:="{controller}/{id}", 
     defaults:=New With {.id = RouteParameter.Optional} 

そして、この:

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

私もフィドラー4からこれを試してみましたが、私は得る:

{"メッセージ": "リクエストにエンティティbが含まれていますコンテンツタイプの ヘッダーはありません。 "、" ExceptionMessage ":" No MediaTypeFormatterは、タイプ 'String'のオブジェクトを読み取るために利用可能です メディアタイプ のコンテンツからアプリケーション/ "、" System.Net.Http.UnsupportedMediaTypeException "、" StackTrace ":"at System.Net.Http.HttpContentExtensions.ReadAsAsync [T](HttpContent コンテンツ、タイプタイプ、IEnumerable ' 1つのフォーマッタ、IFormatterLogger formatterLogger、CancellationToken cancellationToken)\ R \ nは System.Web.Http.ModelBinding.FormatterParameterBinding.ReadContentAsync(HttpRequestMessage 要求タイプタイプ、IEnumerableを「1つのフォーマッタ、IFormatterLogger formatterLoggerにおいて、 CancellationToken cancellationToken) "}

または私は、ヘッダー内のコンテンツ・タイプを設定しようとすると、私が取得:

ないMediaTypeFormatterが持つコンテンツから 『文字列』型のオブジェクトを読み取ることが可能ですメディアタイプ...

ここで、<は>私が設定したメディアタイプです。

この単純なPOSTの仕組みをどうすればいいですか?

答えて

0

あなたのAPIに使用しているフレームワークは、リクエストで設定しているコンテンツタイプヘッダーに基づいてPOSTリクエストの本文の内容を解析する方法を知らないようです。

また、お客様のAPI controller may not know how to parse plain text

サポートされているコンテンツタイプを手動で追加することも、上記のリンクのいずれかの回答に従って手動でリクエストコンテンツを読み取ることもできます。または、コントローラーをaccept a form post like soに変更することもできます。

+0

これはおそらく質問に対するかなりまともな答えです。しかし、私は別のルートを行っており、答えを提示してこれを再テストする時間を本当に正当化することはできません。うまくいけば、他の誰かがこれが役に立つと思うことでしょう。 – Jeroen

関連する問題