2017-03-14 40 views
0

我在VB中創建api conroller類。我有一個很簡單的功能在裏面:測試API帖子通過<Frombody()>類 - 總是NULL

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

當我從發送HTTP 工具(Firefox擴展)POST請求,我可以看到它在功能上走,但value總是空空的。

我有這個在我的WebApiConfig.vb

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

而這Global.ASAX.vbApplication-Start()下:

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

我提琴手4嘗試過這種從爲好,但我得到:

{「Message」:「該請求包含一個實體b ody但沒有內容類型 標題。 「」ExceptionMessage「:」No MediaTypeFormatter可用於從媒體類型爲 的應用程序讀取類型爲'String'的對象 '應用程序/八位字節流'不支持此資源 ' octet-stream'。「,」ExceptionType「:」System.Net.Http.UnsupportedMediaTypeException「,」StackTrace「:」 at System.Net.Http.HttpContentExtensions.ReadAsAsync [T](HttpContent content,Type type,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