首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ASP.NET web api无法获取应用程序/x-www-form-urlencoded HTTP POST

ASP.NET web api无法获取应用程序/x-www-form-urlencoded HTTP POST
EN

Stack Overflow用户
提问于 2013-12-04 15:19:06
回答 4查看 56.3K关注 0票数 31

我是第一次接触web-api。我想要接收使用web-api的HTTP POST数据。content-type为application/x-www-form-urlencoded,请求正文如下:

data={"mac":"0004ED123456","model":"SG6200NXL"}(JSON格式)。

我的控制器是这样的:

代码语言:javascript
复制
public void Post([FromBody]string formData)
{
    data.Add(formData);
}

但formData始终为空。仅当我将请求正文更改为:

={"mac":"0004ED123456","model":"SG6200NXL"}

我可以在我的formData字符串中找到保存的{"mac":"0004ED123456","model":"SG6200NXL"}

所以我的问题是,我应该如何接收带有格式的数据:

data={"mac":"0004ED123456","model":"SG6200NXL"}

有没有一种简单的方法可以将JSON淡化成C#?

感谢您的帮助!

更新:我尝试使用model,但它仍然不适用于我。我的模型是:

代码语言:javascript
复制
public class Device
    {
        public string mac { get; set; }
        public string model { get; set; }
    }

我的HTTP POST请求是:

标题:

代码语言:javascript
复制
User-Agent: Fiddler
Content-type: application/x-www-form-urlencoded
Host: localhost:52154
Content-Length: 46

正文:

代码语言:javascript
复制
data={"mac":"0004ED123456","model":"SG6200NX"}

据我所知,我必须使用Content-type: application/x-www-form-urlencoded,因为HTTP POST是由路由器发送的。我的工作是接收数据。

EN

回答 4

Stack Overflow用户

发布于 2016-08-18 03:59:09

这篇文章很旧了,但是我在寻找答案的时候偶然发现了它。我会把我的方法发布出来,也许有人会发现它很有用。

下面是请求:

代码语言:javascript
复制
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

以下是模型:

代码语言:javascript
复制
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; }
}

下面是自动(FromBody)将the编码值转换为模型的POST方法。

代码语言:javascript
复制
public HttpResponseMessage Post([FromBody] SampleModel value){

我能够挑选出任何值,即

代码语言:javascript
复制
    SearchCity(value.City);
    SearchName(value.Last_Name);
票数 7
EN

Stack Overflow用户

发布于 2013-12-04 15:41:11

您应该为数据创建一个对象,如下所示:

代码语言:javascript
复制
public class Device
{
  public string mac {get;set;}
  public string model {get;set;}
}

然后像这样修改你的控制器的action方法,并将你的对象从then传递给这个方法

代码语言:javascript
复制
public void Post(Device deviceData)
{
    // You can extract data like deviceData.mac, deviceData.model etc
    data.Add(deviceData);
}

您可以使用一个流行的库json.net对C#中的json对象进行序列化/反序列化

票数 3
EN

Stack Overflow用户

发布于 2013-12-04 15:55:33

创建模型

代码语言:javascript
复制
public class MyClass {
    public string mac { get; set; }
    public string model { get; set; }
}

并使用.net JavaScriptSerializer().Deserialize

代码语言:javascript
复制
public void Post([FromBody]string formData){
    MyClass obj = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<MyClass>(formData);
    //get mac and model by obj.mac obj.model
}

干杯:)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20369361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档