【问题标题】:ASP.NET MVC Web API Delete call using jQuery Ajax with data params not workingASP.NET MVC Web API 使用 jQuery Ajax 删除调用,数据参数不起作用
【发布时间】:2017-06-12 11:01:02
【问题描述】:

我有一个如下的 web api 方法:

    /// <summary>
    /// DELETE: api/ftpapi/custom/deletefiles
    /// </summary>
    /// <param name="items"></param>
    /// <returns></returns>
    [HttpDelete]
    [ResponseType(typeof(void))]
    public IHttpActionResult DeleteFiles(string[] items)
    {
        return Ok();
    }

在我看来,我使用 Ajax 调用此方法:

            var values = $('input:checkbox[name=items]:checked').map(function () {
            return this.value;
            }).get();

            $.ajax({
                url: uri_api + '/custom/deletefiles',
                method: "DELETE",
                data: { items: values }
            }).done(function (data) {
                    location.reload(true);
                })
            .fail(function (jqXHR, textStatus, err) {
                console.log('Error: ' + err);
            })
            .always(function () {
                $('#loader').fadeOut(200);
                $('body').removeClass('loader-in');
            });

当我在return Ok(); 放置一个断点并测试它时,它可以工作。除了参数string[] items 始终为空。

如果我查看谷歌浏览器的网络标签,我可以在我的表单数据中看到这些项目:

我在这里错过了什么?

【问题讨论】:

  • values 的值是多少?并设置contentType: 'application/json'
  • @StephenMuecke 查看更新。
  • 还有data: JSON.stringify({ items: values })
  • 现在是 null 而不是空数组
  • @StephenMuecke 好的,现在解决了。我创建了一个新的类模型,其中包含一个名为 Items 类型的字符串 [] 的属性

标签: javascript jquery asp.net ajax asp.net-mvc


【解决方案1】:

改为: 由于 JSON.stringify 将 Javascript 对象转换为 JSON 文本并将该 JSON 文本存储在字符串中。

  $.ajax({
            url: uri_api + '/custom/deletefiles',
            contentType: "application/json; charset=utf-8",
            method: "DELETE",
            data: JSON.stringify({ items: values })
        }).done(function (data) {
                location.reload(true);
            })
        .fail(function (jqXHR, textStatus, err) {
            console.log('Error: ' + err);
        })
        .always(function () {
            $('#loader').fadeOut(200);
            $('body').removeClass('loader-in');
        });

【讨论】:

    【解决方案2】:

    不要写data: { items: values },而应该写data: JSON.stringify({ 'items': values })

    这就是 ajax 处理数组的方式。

    【讨论】:

      【解决方案3】:

      感谢@Stephen Muecke我首先对我的ajax调用添加了一些更改:

      $.ajax({
           url: uri_api + '/custom/deletefiles',
           method: "DELETE",
           data: JSON.stringify({ 'items': values }), // Added Stringify
           contentType: 'application/json' // Added content type
      });
      

      我已经创建了一个具有一个属性的新类模型:

      public class FtpFilesModel
      {
          public string[] Items { get; set; }
      }
      

      那么最后要做的就是将方法属性更改为新创建的类:

      [HttpDelete]
      [ResponseType(typeof(void))]
      public IHttpActionResult DeleteFiles(FtpFilesModel files)
      {
          return Ok();
      }
      

      现在它开始工作了!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-05
        • 2014-05-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多