我在VB中创建一个api conroller类。我有一个非常简单的功能:
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.vb
下的Application-Start()
:
RouteTable.Routes.MapHttpRoute(name:="Post", routeTemplate:="post", defaults:=New With {.symbol = RouteParameter.Optional, .controller = "Names"})
我也尝试过 Fiddler 4 ,但我得到了:
{“Message”:“请求包含实体主体但没有Content-Type 头。推断的媒体类型'application / octet-stream'不是 支持此资源。“,”ExceptionMessage“:”不 MediaTypeFormatter可用于读取“String”类型的对象 来自媒体类型的内容 '应用程序/八位字节流' “” ExceptionType。 “:” System.Net.Http.UnsupportedMediaTypeException “ ”堆栈跟踪“:” 在System.Net.Http.HttpContentExtensions.ReadAsAsync [T](HttpContent) content,Type type,IEnumerable'1 formatters,IFormatterLogger formatterLogger,CancellationToken cancellationToken)\ r \ n at System.Web.Http.ModelBinding.FormatterParameterBinding.ReadContentAsync(HttpRequestMessage 请求,类型类型,IEnumerable'1格式化程序,IFormatterLogger formatterLogger,CancellationToken cancellationToken)“}
或者当我尝试在标题中设置内容类型时,我得到:
没有MediaTypeFormatter可用于读取“String”类型的对象 来自媒体类型的内容......
其中&lt; ...&gt;是我设置的媒体类型。
如何使这个简单的POST工作?
答案 0 :(得分:0)
您使用的API框架似乎不知道如何根据您在请求中设置的内容类型标头解析POST请求正文的内容。
另外,您的API controller may not know how to parse plain text。
您可以手动添加支持的内容类型,也可以根据上述链接中的一个答案手动读取请求内容。或者您可以将控制器更改为accept a form post like so。