ASP.NET web api无法获取application/x-www-form-urlencoded HTTP POST

 梦幻00草根_831 发布于 2023-02-13 03:15

我是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);
}

但是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; }
    }

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

2 个回答
  • 引自这里:

    默认情况下,Web API尝试从请求URI中获取简单类型.该FromBody属性指示Web API来读取请求主体的价值.

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

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

    =价值

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

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

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

    并像这样更新您的控制器:

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

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

    2023-02-13 03:25 回答
  • 这篇文章很老了,但我在寻找答案时偶然发现了它.我将发布如何让我的工作,也许有人会觉得它很有用.

    这是请求:

    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
    

    这是模型:

    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; }
    }
    

    这里是POST方法,自动(FromBody)将urlencoded值转换为模型.

    public HttpResponseMessage Post([FromBody] SampleModel value){
    

    我能够挑出任何价值,即

        SearchCity(value.City);
        SearchName(value.Last_Name);
    

    2023-02-13 03:28 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有