测试API Post传递<frombody()>类 - 始终为NULL

时间:2017-03-14 01:07:34

标签: vb.net asp.net-web-api fiddler

我在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工作?

1 个答案:

答案 0 :(得分:0)

您使用的API框架似乎不知道如何根据您在请求中设置的内容类型标头解析POST请求正文的内容。

另外,您的API controller may not know how to parse plain text

您可以手动添加支持的内容类型,也可以根据上述链接中的一个答案手动读取请求内容。或者您可以将控制器更改为accept a form post like so