启用ASP.NET Web Api以同时容纳JSON和Form编码数据

时间:2015-09-17 13:53:36

标签: c# asp.net json asp.net-mvc asp.net-web-api

我在我的MVC应用程序中内置了一个ASP.NET web api,它当前接收所有伴随请求的数据作为表单编码数据。

我将此作为FormDataCollection对象接收并解析如下:

public string Post(FormDataCollection data)
{
    var first = data.Get("FirstName");
    //for every supported field.
}

我的回复始终是JSON字符串。

这很好,我想继续适应这个,但我希望我的用户能够发送带有内容类型标题应用程序/ JSON 以及的JSON,以便我可以支持都。

我如何以简单的方式容纳两者?它是否必须涉及检查内容标题并使用不同的代码来提取每种情况下的属性?

2 个答案:

答案 0 :(得分:4)

asp.net model binder为您处理绑定。定义一个代表您的模型的类:

public class Person
{
  public string Firsname{ get; set; }
}

然后让您的控制器操作将此视图模型作为参数:

public class PersonController : ApiController
{

  public void Post(Person model)
  {
    ...
  }
}

最后,您可以使用jquery ajax或您选择的任何内容发布。 e.g

$.ajax({
type: 'POST',
url: '/api/person',
cache: false,
contentType: 'application/json; charset=utf-8',
data: JSON.stringify({ Firstname: "John Doe" }),
success: function() {
    ...    
   }
});

答案 1 :(得分:3)

尝试使用如下的模型类;

public class MyTargetModel
{
    public string FirstName { get; set; }
}

public string Post(MyTargetModel model)
{
    var first = model.FirstName;
    //for every supported field.
}

当我说模型课时,我指的是POCO课程。 ASP.NET MVC和Web API应该能够根据需要将请求数据解析到类中。