ASP.NETwebapi无法获取application/x-www-form-urlencodedHTTPPOSTI'我来自web-api新手。我想使用web-api接收HTTPPOST数据。内容类型为application/x-www-form-urlencoded,请求文本如下:data={"mac":"0004ED123456","model":"SG6200NXL"}(JSON格式)。我的控制器是这样的:publicvoidPost([FromBody]stringformData){data.Add(formData);但是formData总是空的。只有当我将请求文本更改为:={"mac":"0004ED123456","model":"SG6200NXL"}我才能找到{"mac":"0004ED123456","model":"SG6200NXL"}保存在我的在formData字符串中。所以我的问题是我应该如何接收以下格式的数据:data={"mac":"0004ED123456","model":"SG6200NXL"}?有没有一种简单的方法可以将JSON淡化为C#?谢谢您的帮助!更新:我尝试使用模型,但它仍然对我不起作用。我的模型是:publicclassDevice{publicstringmac{get;放;}公共字符串模型{get;放;我的HTTPPOST请求是:Header:User-Agent:FiddlerContent-type:application/x-www-form-urlencodedHost:localhost:52154Content-Length:46Body:data={"mac":"0004ED123456","model":"SG6200NX"}据我所知,我必须使用Content-type:application/x-www-form-urlencoded因为HTTPPOST是由路由器发送的。我的工作是接收数据。引自此处:默认情况下,WebAPI会尝试从请求URI中获取简单类型。FromBody属性告诉WebAPI从请求正文中读取值。WebAPI最多读取一次响应体,因此请求体中只能有一个动作参数。如果需要从请求体中获取多个值,定义复杂类型。其次,客户端需要使用以下格式发送值:=value具体来说,对于简单类型,名称/值对的名称部分必须为空。因此,如果您想以data=string格式发布数据,则必须创建复杂类型。公共类MyFormData{公共字符串数据{得到;放;}}并像这样更新您的控制器:publicvoidPost(MyFormDataformData){//您的JSON字符串将在formData.Data}当然您的其他选项是将内容类型更改为JSON,但这实际上取决于您要求。这篇文章很老了,但我在寻找答案时偶然发现了它。我会发布我如何让我的工作,也许有人会发现它有用。这里是请求:POST/api/valuesHTTP/1.1Host:localhost:62798Accept:text/jsonContent-Type:application/x-www-form-urlencodedCache-Control:no-cachePostman-Token:51ee1c5f-acbb-335b-35d9-d2b8e62abc74UID=200&EMAIL=john%40jones.com&FIRST_NAME=John&LAST_NAME=jones&PHONE=433-394-3324&CITY=Seattle&STATE_CODE=WA&ZIP=98105这是模型:publicclassSampleModel{publicstringgetUID{}}public字符串First_Name{得到;放;}publicstringLast_Name{get;放;}publicstringPhone{get;放;}publicstringCity{get;放;}publicstringState_Code{得到;放;}publicstringZip{得到;放;这是POST方法,它自动(FromBody)将urlencoded值转换为模型。publicHttpResponseMessagePost([FromBody]SampleModelvalue){我能够挑出任何值,即SearchCity(value.City);SearchName(value.Last_Name);您应该像这样创建数据对象:publicclassDevice{publicstringmac{get;set;}publicstringmodel{get;set;}}然后像这样更改控制器的操作方法并将对象从consume传递给此方法publicvoidPost(DevicedeviceData){//你可以提取像deviceData.mac,deviceData.model等数据data.Add(deviceData);您可以使用流行的库json.net之一在C#中序列化/反序列化json对象创建模型publicclassMyClass{publicstringmac{get;放;}公共字符串模型{get;放;}}并使用.netJavaScriptSerializer()。反序列化publicvoidPost([FromBody]stringformData){MyClassobj=newSystem.Web.Script.Serialization.JavaScriptSerializer().Deserialize(formData);//getmac和modelbyobj.macobj.model}干杯:)如果您使用的是Content-type:application/x-www-form-urlencoded,您不能期望收到JSON。我猜您正在使用表单将数据发送到WebApi控制器?首先,您必须将Content-type更改为application/json,然后您必须确保在请求文本中发送JSON数据。如果您通过表单发送数据,您可以使用javascript从表单数据创建一个JSON对象。在C#中反序列化JSON,我推荐使用Json.NET:http://json.codeplex.com/以上是C#学习教程:ASP.NETwebapicannotgetapplication/x-www-form-urlencodedHTTPIfallPOST分享的内容对你有用,需要了解更多的C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
