【问题标题】:Can't pass/receive values with POST request AJAX无法通过 POST 请求 AJAX 传递/接收值
【发布时间】:2019-11-26 09:09:12
【问题描述】:

我正在尝试使用 Ajax Post 请求发送一些数据。 请求代码如下:

$.ajax({
    url: "[url of page]",
    type: "POST",
    data: {saluto: true},
    dataType: 'text',
    success: function (response) {
        alert("successful" + response);
    },
    error: function () {
        alert("error");
    }
});

所以在这种情况下我应该收到saluto = true

这是后端代码:

[HttpPost("Test")]
public async Task<string> testHelloWorld(bool saluto)
{

    try
    {
        string testString = "Funziona";
        Console.Write(testString + ": " + saluto + "\n");
        return testString;
    }
    catch (Exception ex)
    {
        Log.Error("API(CallToXML) - Exception", ex);
        return null;
    }
}

所以如果saluto = true 我的控制台应该打印"Funziona: True" 输出是"Funziona: False"

如果我用字符串尝试同样的事情,它不会打印字符串,而只会留下像"Funziona: "这样的输出

为什么我的代码没有接收到任何数据? 有什么我做错了吗? 谢谢。

【问题讨论】:

  • 请包含用于发送和接收字符串的代码
  • 不,但它确实看起来像 javascript,这就是问题所在。
  • @TommasoBertoni 还是一样的代码,我只是把bool saluto改成string saluto,前端请求就变成了saluto:"prova"
  • 当您从前端发送true 时,您是否收到saluto == false

标签: javascript c# ajax post


【解决方案1】:

尝试删除"data: " 并将"url: " 更改为:{ value: "~/Controller/Method?saluto=true" })

【讨论】:

  • 我尝试了你的方法,它有效,但如果我尝试发送更大的字符串,它将无法工作。请求的状态还是会返回错误
【解决方案2】:

您需要将操作的签名更改为

public async Task<string> testHelloWorld([FromBody]bool saluto)

默认情况下,模型绑定器在请求参数而不是请求正文中查找简单类型。

查看Tadej's answerWhy do we have to specify FromBody and FromUri? 了解更多信息。

【讨论】:

  • 数据很简单,使用POST发送,因此无法提取FromUri
  • @TommasoBertoni 非常正确,应该是 [FromBody] - 已更正
  • 这样更好,但我认为这不会解决问题。如果只有一个参数或者请求来自POST,asp.net应该能够理解来源
  • 我目前正在检查另一个答案是否有效。我会在几秒钟内检查这个方法,谢谢
  • @phuzi 仅添加 [FromBody] 并没有帮助,它实际上使情况变得更糟,因为甚至无法发送请求
猜你喜欢
  • 2019-01-06
  • 2021-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-02
  • 1970-01-01
  • 2018-09-26
相关资源
最近更新 更多