将POST参数传递给WEB API2

3

我有两个不同的模型需要传递到 Web API。这两个示例模型如下:

 public class Authetication
 {
     public string appID { get; set; }
 }

 public class patientRequest
 {
     public string str1 { get; set; }
 }

为了解决这个问题,我创建了一个第三个模型,如下所示。
 public class patientMaster
 {
     patientRequest patientRequest;
     Authetication Authetication;
 }

为了传递数据,我已经创建了以下jQuery代码。

var patientMaster = { 
    patientRequest : { "str1" : "John" },                                       
    Authetication  : { "appID" : "Rick" } 
}


$.ajax({
          url: "http://localhost:50112/api/Patient/PostTestNew",
          type: "POST",
          data: {"": patientMaster}
        });

为了捕获这个,我在控制器中创建了以下方法。
[HttpPost]
public string PostTestNew(patientMaster patientMaster)
{
   return " .. con .. ";
}

我的问题是

每次测试时,我都可以获取patientMaster对象,但我无法获取任何数据的Authetication对象或patientRequest对象。

我也尝试在jquery中传递contenttype:json,但它不起作用。

有人能帮我解决这个问题吗?


尝试在jQuery函数的data属性中使用与您的ActionResult完全相同的名称。 在这种情况下:data: {patientMaster : patientMaster} - Benjamin
尝试了一下,但效果相同...获取了patientMaster对象,但没有获取到任何数据身份验证对象或patientRequest对象。 - Dhaval
如果你在 ajax 调用中加入 dataType: "json" 会怎样呢? - Benjamin
然后它的结果也是一样的。 - Dhaval
@Phill 嗯,我很快就写完了这个示例API和JS的东西,所以可能会有一些缺失的标准,但感谢你指出来...你能否给一些通用命名规范的链接? - Dhaval
显示剩余4条评论
1个回答

6
你已经很接近正确了。我添加了一个FromBody属性并指定了内容类型。此外,我还将你的patientMaster对象中的属性设置为公共访问级别。
患者主对象:
 public class patientMaster
 {
    public patientRequest patientRequest { get; set;}
    public Authetication Authetication { get; set;}
 }

API控制器:

[HttpPost]
public string PostTestNew([FromBody]PatientMaster patientMaster)
{
    return "Hello from API";
}

jQuery 代码:

var patientRequest = { "str1": "John" };
var authentication = { "appID": "Rick" };
var patientMaster = {
      "PatientRequest": patientRequest,
      "Authentication": authentication
};

$.ajax({
         url: "http://localhost:50112/api/Patient/PostTestNew",
         type: "POST",
         data: JSON.stringify(patientMaster),
         dataType: "json",
         contentType: "application/json",
         traditional: true
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接