【问题标题】:Can't pass complex parameters from jquery post to WebAPI无法将复杂参数从 jquery post 传递到 WebAPI
【发布时间】:2016-01-19 08:11:32
【问题描述】:

我有一个带有 WebAPI 功能的 ASP MVC 项目。我正在尝试通过我的“Apache Cordove 工具”项目中的 jquery POST 请求调用这些 API。 (视觉工作室 2015) 它适用于大多数功能。但我有一个具有复杂参数的函数:

public JsonResult LoadHomePage(MostGoodsViewer mostgoodsviewer, SimilarItems newsitems, SimilarItems reviewitems, SimilarItems imaginalitems, string subDomain)

所有参数都是复杂的(最后一个除外)。例如:

public class MostGoodsViewer
{
    public MostGoodsViewer()
    {
        ListGoodTypeId = new List<string>();
        listPropertySetID = new List<int?>();
    }
    public List<string> ListGoodTypeId { get; set; }
    public List<int?> listPropertySetID { get; set; }
    public int PageSize { get; set; }
}

现在我想调用这个 API。首先,我声明我的参数:

var mostgoodsviewerP =
    {
        ListGoodTypeId: [],
        listPropertySetID: [],
        PageSize: 13
    };
var newsitemsP =
    {
        ItemCodeText: "/",
        ItemTypeId: 15,
        Count: 9
    };
var reviewitemsP =
  {
      ItemCodeText: "/",
      ItemTypeId: 19,
      Count: 9
  };
var imaginalitemsP =
  {
      ItemCodeText: "/",
      ItemTypeId: 20,
      Count: 9
  };

接下来,我使用 POST 方法:

xhr = $.post('https://localhost:44302/Home/LoadHomePage', {
        mostgoodsviewer: JSON.stringify(mostgoodsviewerP),
        newsitems: JSON.stringify(newsitemsP),
        reviewitems: JSON.stringify(reviewitemsP),
        imaginalitems: JSON.stringify(imaginalitemsP),
        subDomain: 'electronic'

    },
    function (data) {
      //  for (var i = 0; i < 9; i++)
        {
            var a = data._goodsorderByTotalVisit;
            // other stuff
        }
    }).fail(function (data) {
        alert("error");
    });

我也尝试使用 jQuery.param 而不是 JSON.stringify 但没有区别。 它总是使用数据“对象引用未设置为对象的实例”跳转到失败方法。

然后我尝试使用 Fiddler 程序而不是我的 cordova 项目来发送请求,并在函数标题下使用断点运行我的 MVC 项目。 我意识到参数不正确。例如,整数都为零。我不知道现在该怎么办!

【问题讨论】:

  • 尝试在每个model class 上应用[serialize] 属性。
  • @ParthTrivedi :我使用了 [Serializable] 但仍然没有区别
  • 我遇到了类似的问题,我传递了参数string,在jquery中使用JSON.stringify(),然后我使用了JsonConvert.DeserializeObject&lt;MostGoodsViewer&gt;(mostgoodsviewerString)之类的东西

标签: jquery asp.net-mvc post asp.net-web-api visual-studio-cordova


【解决方案1】:

你应该这样做

jQuery

xhr = $.post('https://localhost:44302/Home/LoadHomePage', {
        mostgoodsviewer: JSON.stringify(mostgoodsviewerP),
        newsitems: JSON.stringify(newsitemsP),
        reviewitems: JSON.stringify(reviewitemsP),
        imaginalitems: JSON.stringify(imaginalitemsP),
        subDomain: 'electronic'

    },

控制器

public JsonResult LoadHomePage(string mostgoodsviewer, string newsitems, string reviewitems, string imaginalitems, string subDomain){

   MostGoodsViewer mostGoodsViewer = JsonConvert.DeserializeObject<MostGoodsViewer>(mostgoodsviewer);
    // and for others same thing to follow
}

这可能会帮助您解决这个问题。

你也可以这样做

$.post(url, data, function(), "json") 

在此处添加"json" 作为第二个arg,并可以使用您当前的代码修复您的模型绑定问题。

【讨论】:

  • 试试这个。如果对您有帮助,请点赞并回答。
  • 谢谢,我也遇到了 ssl 的另一个问题,但这是我提到的问题的一个很好的解决方案。
  • 我检查了复杂模型的模型绑定问题,我们需要在您的代码中为$.post 传递contentType: "application/json; charset=utf-8" 添加参数"json"
  • @armanradan 我认为第二种解决方案是我找到的实际解决方案。愿它如我们所愿。它无法得到一个 json 结构。所以我们需要提供contenttype 所以在Controller中它将与Model绑定
猜你喜欢
  • 2016-02-05
  • 2019-03-20
  • 1970-01-01
  • 2012-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多