【问题标题】:Post list of string null on web api controller在 web api 控制器上发布字符串 null 列表
【发布时间】:2014-12-31 05:23:27
【问题描述】:

在我的 web api 项目中,我有一个名为 ContactController 的控制器和一个名为 Synchro 的方法,它等待如下字符串列表:

[HttpPost]
    [Route("api/Contact/Synchro")]
    public IHttpActionResult Synchro([FromBody]List<string> listNumTel)
    {
        List<Profil> listContact = new List<Profil>();
        if (listNumTel.Count() > 0)
        {
            try
            {
                listContact = Librairie.Contacts.getContactSync(listNumTel);
                return Ok(listContact);
            }
            catch(Exception e) {
                return InternalServerError(e);
            }
        }
        else
        {
            return BadRequest();
        }
    }

为了测试该方法,我创建了下面调用的 ajax:

$("#btn_synchro").click(function () {
    $.ajax({
        url: '../api/Contact/Synchro',
        type: 'POST',
        data: {
            "listNumTel": [
                "+33640512999",
                "+33640522997",
                "+33640182998",
                "+33640742996"]
        },
        dataType: 'json',
        success: function (data) {
            alert('Synchro réussi: ' + data);
        },
        error: function (request, error) {
            alert("Erreur lors de la synchro");
        }
    })
});

当我在调试模式下进行测试时,调用工作正常,但该方法得到一个空列表。我检查了 json 是否有效并且它是有效的。有人看到可能出了什么问题吗?提前致谢!

【问题讨论】:

  • 如果浏览器以内容类型“application/x-www-form-urlencoded”的形式发送请求,您能否检查您的请求?
  • 请求的内容类型似乎是:application/json
  • 好吧,尝试将其设置为“application/x-www-form-urlencoded”,因为我认为您的后端不会理解这是一个传入的 POST 请求。 jQuery 似乎应该默认将其设置为此,但尝试在contentType 中显式设置它

标签: json string list post asp.net-web-api


【解决方案1】:

感谢您的回答,但我刚刚找到了解决方案。这完全是关于发送的 JSON。例如,要通过 ajax 调用发送字符串列表,JSON 应该类似于变量 listNumero

("#btn_synchro").click(function () {
    var listNumero = 
        [   '+33640532999',
            '+33640532997',
            '+33640532998',
            '+33640532996'];

    $.ajax({
        url: '../api/Contact/Synchro',
        type: 'POST',
        data: JSON.stringify(listNumero),
        contentType: "application/json",
        dataType: 'json',
        success: function (data) {
            alert('Synchro réussi: ' + data);
        },
        error: function (request, error) {
            alert("Erreur lors de la synchro");
        }
    })
});

你可以对比我的帖子,JSON 是不同的。现在我的 web api 控制器可以从列表中获取值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-06
    • 2019-09-08
    • 1970-01-01
    • 2018-05-30
    • 2016-08-02
    • 2017-09-10
    • 1970-01-01
    相关资源
    最近更新 更多