我是Web API的新手。我想使用web-api接收HTTP POST数据。content-type为application/x-www-form- urlencoded,请求主体为:
application/x-www-form- urlencoded
data={"mac":"0004ED123456","model":"SG6200NXL"}(JSON格式)。
data={"mac":"0004ED123456","model":"SG6200NXL"}
我的控制器是这样的:
public void Post([FromBody]string formData) { data.Add(formData); }
但是formData始终为null。仅当我将请求正文更改为:
={"mac":"0004ED123456","model":"SG6200NXL"}
我可以找到{"mac":"0004ED123456","model":"SG6200NXL"}已保存在我的formData字符串中。
{"mac":"0004ED123456","model":"SG6200NXL"}
formData
所以我的问题是我应该如何接收具有以下格式的数据:
data={"mac":"0004ED123456","model":"SG6200NXL"}?
是否有一种简单的方法可以将JSON淡化为C#?
感谢帮助!
更新:我尝试使用模型,但是它仍然对我不起作用。我的模型是:
public class Device { public string mac { get; set; } public string model { get; set; } }
我的HTTP POST请求是:
标头:
User-Agent: Fiddler Content-type: application/x-www-form-urlencoded Host: localhost:52154 Content-Length: 46
身体:
data={"mac":"0004ED123456","model":"SG6200NX"}
Content-type: application/x-www-form-urlencoded据我所知,我必须使用,因为HTTP POST是由路由器发送的。我的工作是接收数据。
Content-type: application/x-www-form-urlencoded
从这里报价:
默认情况下,Web API尝试从请求URI中获取简单类型。该 FromBody 属性指示Web API来读取请求主体的价值。 Web API最多读取一次响应主体,因此操作的一个参数只能来自请求主体。如果需要从请求正文中获取多个值,请定义一个复杂类型。 其次,客户端需要使用以下格式发送值: =值 具体来说,对于简单类型,名称/值对的名称部分必须为空。
默认情况下,Web API尝试从请求URI中获取简单类型。该 FromBody 属性指示Web API来读取请求主体的价值。
Web API最多读取一次响应主体,因此操作的一个参数只能来自请求主体。如果需要从请求正文中获取多个值,请定义一个复杂类型。
其次,客户端需要使用以下格式发送值:
=值
具体来说,对于简单类型,名称/值对的名称部分必须为空。
因此,如果要以格式发布数据,则data=string必须创建复杂类型。
data=string
public class MyFormData { public string Data { get; set; } }
然后像这样更新您的控制器:
public void Post(MyFormData formData) { //your JSON string will be in formData.Data }
当然,您的其他选择是将内容类型更改为JSON,但实际上取决于您的要求。