C# ASP.NET Web API-编号';MediaTypeFormatter';可用于读取类型为';Int32';
我不完全确定这里发生了什么。我可能在什么地方把事情搞砸了,但我不知道是什么 我的API控制器方法如下所示:C# ASP.NET Web API-编号';MediaTypeFormatter';可用于读取类型为';Int32';,c#,asp.net,asp.net-web-api,C#,Asp.net,Asp.net Web Api,我不完全确定这里发生了什么。我可能在什么地方把事情搞砸了,但我不知道是什么 我的API控制器方法如下所示: public HttpResponseMessage<string> Put(int id) public void Put() { var s = Request.Content.ReadAsStringAsync().Result; } 公共httpresponsemessageput(int-id) 我也用同样的错误尝试了一个字符串 有什么想法吗 谢谢 编辑
public HttpResponseMessage<string> Put(int id)
public void Put()
{
var s = Request.Content.ReadAsStringAsync().Result;
}
公共httpresponsemessageput(int-id)
我也用同样的错误尝试了一个字符串
有什么想法吗
谢谢
编辑:要清除-id是路线参数。请求的主体是JSON。如果删除route参数,该方法将正常工作。令人惊讶的是,int和string在默认情况下没有MediaTypeFormatter,因此它不知道如何处理这些类型 它只知道如何处理开箱即用的类型是JSON、XML和表单url编码的数据。这句话来自asp.net官方网站 在Web API中,媒体类型决定Web API如何序列化和 反序列化HTTP消息正文。内置了对XML的支持, JSON和formurlencoded数据,您可以支持其他媒体 通过编写媒体格式化程序进行键入 现在,您可以“编写”自己的MediaTypeFormatter(我提供的链接将向您展示如何编写),但由于asp.net web api仍处于测试阶段,我在使用自定义格式化程序处理字符串等简单类型时遇到了很多麻烦。我发现,只需将您想要输入的任何值封装到xml/json中,它就会自动反序列化,这要容易得多。更多信息请参见我的帖子 举个具体的例子,你的身体看起来
<message>
<id>6</id>
</message>
6.
然后确保将http请求的内容类型设置为text/xml(如果选择使用,则设置为application/json)。它应该序列化到变量中。是否将int值放在请求消息的主体中?如果是,格式是什么 如果内容类型是文本,Web API将不知道如何处理它,因为Web API不提供文本的媒体格式化程序。正如Despertar所指出的,您可以编写自定义格式化程序 您也可以这样做:
public HttpResponseMessage<string> Put(int id)
public void Put()
{
var s = Request.Content.ReadAsStringAsync().Result;
}
请阅读以下博文: