我不熟悉网络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);
}

但是formData总是空的.只有当我将请求主体更改为:

={"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; }
    }

我的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是由路由发送的.我的工作是接收数据.

推荐答案

引用here:

默认情况下,Web APItry 从请求URI获取简单类型.FromBody属性告诉Web API从请求正文中读取值.

Web API最多读取一次响应体,因此一个操作的一个参数只能来自请求体.如果需要从请求体获取多个值,请定义一个复杂类型.

其次,客户端需要发送以下格式的值:

=value

具体来说,对于简单类型,名称/值对的名称部分必须为空.

因此,如果要以data=string格式发布数据,则必须创建复杂类型.

public class MyFormData
{
    public string Data { get; set; }
}

并更新控制器,如下所示:

public void Post(MyFormData formData)
{
    //your JSON string will be in formData.Data
}

当然,您的其他 Select 是将内容类型更改为JSON,但这实际上取决于您的需求.

Asp.net相关问答推荐

.net 中的 [] 括号是什么?

如何调试 Azure 500 内部服务器错误

self 跟踪实体与 POCO 实体

模型项的类型为 CookMeIndexViewModel,但需要类型为 IEnumerable 的模型项

如何在不使用 Session 的情况下在 ASP.net 中的页面之间传递值

c# - 如何从列表中获取值的总和?

你如何确定哪个验证器失败了?

配置转换和TransformXml 任务失败错误消息

学习什么 - Ruby on Rails 或 ASP .NET MVC...鉴于熟悉 ASP .NET

如何在 ASP.NET 页面中以编程方式生成 401 错误

如何将表从存储过程检索到数据表?

要调用此方法,Membership.Provider属性必须是ExtendedMembershipProvider的实例

SQLServer 与 StateServer 的 ASP.NET 会话状态性能

如何将数据集转换为数据表

在资源文件中使用 HTML

IIS - 无法通过 ip 地址而不是 localhost 访问页面

主机与 DnsSafeHost

Unity 中的单例每个调用上下文(Web 请求)

Windows 身份验证在本地 IIS 7.5 上不起作用.错误 401.1

在没有等待 #2 的情况下调用异步方法