Jun*_*Jun 26 c# asp.net json asp.net-web-api
我是web-api的新手.我想使用web-api接收HTTP POST数据.内容类型是application/x-www-form-urlencoded
,请求正文如下:
data={"mac":"0004ED123456","model":"SG6200NXL"}
(JSON格式).
我的控制器是这样的:
public void Post([FromBody]string formData)
{
data.Add(formData);
}
Run Code Online (Sandbox Code Playgroud)
但是formData始终为null.仅当我将请求主体更改为:
={"mac":"0004ED123456","model":"SG6200NXL"}
我可以找到{"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; }
}
Run Code Online (Sandbox Code Playgroud)
我的HTTP POST请求是:
标题:
User-Agent: Fiddler
Content-type: application/x-www-form-urlencoded
Host: localhost:52154
Content-Length: 46
Run Code Online (Sandbox Code Playgroud)
身体:
data={"mac":"0004ED123456","model":"SG6200NX"}
Run Code Online (Sandbox Code Playgroud)
Content-type: application/x-www-form-urlencoded
据我所知,我必须使用,因为HTTP POST是由路由器发送的.我的工作是接收数据.
YK1*_*YK1 30
引自这里:
默认情况下,Web API尝试从请求URI中获取简单类型.该FromBody属性指示Web API来读取请求主体的价值.
Web API最多读取一次响应主体,因此只有一个操作参数可以来自请求主体.如果需要从请求正文中获取多个值,请定义复杂类型.
其次,客户端需要使用以下格式发送值:
=价值
具体而言,对于简单类型,名称/值对的名称部分必须为空.
因此,如果要以格式发布数据,则data=string
必须创建复杂类型.
public class MyFormData
{
public string Data { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
并像这样更新您的控制器:
public void Post(MyFormData formData)
{
//your JSON string will be in formData.Data
}
Run Code Online (Sandbox Code Playgroud)
当然,您的其他选择是将内容类型更改为JSON,但实际上取决于您的要求.
这篇文章很老了,但我在寻找答案时偶然发现了它.我将发布如何让我的工作,也许有人会觉得它很有用.
这是请求:
POST /api/values HTTP/1.1
Host: localhost:62798
Accept: text/json
Content-Type: application/x-www-form-urlencoded
Cache-Control: no-cache
Postman-Token: 51ee1c5f-acbb-335b-35d9-d2b8e62abc74
UID=200&EMAIL=john%40jones.com&FIRST_NAME=John&LAST_NAME=jones&PHONE=433-394-3324&CITY=Seattle&STATE_CODE=WA&ZIP=98105
Run Code Online (Sandbox Code Playgroud)
这是模型:
public class SampleModel{
public string UID { get; set; }
public string Email { get; set; }
public string First_Name { get; set; }
public string Last_Name { get; set; }
public string Phone { get; set; }
public string City { get; set; }
public string State_Code { get; set; }
public string Zip { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这里是POST方法,自动(FromBody)将urlencoded值转换为模型.
public HttpResponseMessage Post([FromBody] SampleModel value){
Run Code Online (Sandbox Code Playgroud)
我能够挑出任何价值,即
SearchCity(value.City);
SearchName(value.Last_Name);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
41237 次 |
最近记录: |