【问题标题】:C# not getting data from AjaxC# 没有从 Ajax 获取数据
【发布时间】:2019-02-11 08:51:20
【问题描述】:

我在将 ajax 数据从我的 javascript 文件发送到我的 c# 控制器时遇到问题。我在我的 c# 程序中收到“错误请求错误”,我得到这个的原因是因为我使用 ajax 发送的数据参数“result”没有被 c# 接收,并且 c# 变量保持为空。我知道 Ajax 正在路由到正确的控制器,因为它正在调用该方法,但是由于某种原因,c# 没有收到变量“result”。

这是我的 ajax 请求。

$.ajax({
   type: 'POST',
   contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
   data: { 'result' : result },
   url: "https://localhost:44374/api/task",
   cache: false,
   success: function (data) {
   // Process the received data.
   }
});

这是我的 c# 控制器

    [HttpPost]
    public ActionResult<string> Get(string result)
    {
        string id = result;
        getTaskContent(id);
        return id;
    }

将Ajax改为GET后,程序运行,输出为:

Microsoft.AspNetCore.Hosting.Internal.WebHost:Information: Request starting HTTP/1.1 GET http://localhost:44374/api/task/1108164994166723?_=1549876832637 application/x-www-form-urlencoded; charset=UTF-8 
Microsoft.AspNetCore.Hosting.Internal.WebHost:Information: Request finished in 17.8526ms 404 

但由于某种原因,C# Actionresult 方法没有得到执行。

看到URL是localhost:44374/api/task/1108164994166723?_=1549876832637,结果变量是1108164994166723,我不知道?_=1549876832637部分是怎么来的。如果我在窗口中提醒结果变量,它只是 1108164994166723

解决方案

更改为 GET 而不是 POST 以及将 Ajax 中的 URL 更改为 url: "localhost:44374/api/task?result=" + result 的组合,完成了这项工作。

正确的 Ajax 代码是:

$.ajax({
   type: 'GET',
   contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
   url: "https://localhost:44374/api/task?result=" + result
});

【问题讨论】:

  • 您的控制器有一个HttpGet 注释过滤器,而您正在为初学者发出一个POST 请求...不确定它是否调用了正确的方法。
  • 为什么结果后面有逗号?如果发送的数据是 JSON 格式,则不能在 json 末尾添加逗号
  • 这两个都没有解决问题,去掉逗号,改成Get
  • 您的第二个问题是数据没有像使用 GET 请求那样设置。将数据添加到 url 而不是请求的正文。
  • 我尝试将结果变量添加到 URL 中,但我被困在如何在 c# 中检索变量

标签: javascript c# jquery asp.net ajax


【解决方案1】:

尝试将内容类型更改为“application/json;charset=utf-8”并在 URL 中发送参数名称,如下所示:

$.ajax({
   type: 'POST',
   contentType: "application/json;charset=utf-8",
   url: "https://localhost:44374/api/task?result=" + result,
   cache: false,
   success: function (data) {
   // Process the received data.
   }
});

【讨论】:

  • “url”部分完成了这项工作,并将 POST 更改为 GET。
【解决方案2】:

将控制器中的GET方法改为POST方法。因为在您的 ajax 调用中,您将类型指定为 post。

【讨论】:

    【解决方案3】:

    必须在Controller中改为HttpPost,并将结果类型改为JsonResult。

    【讨论】:

      【解决方案4】:

      尝试将您的 type 更改为 type:GET - 因为您的控制器操作方法是 HTTPGET 和 contentType 到:contentType: 'application/json; charset=utf-8datadata: JSON.stringify({ result: result })

      【讨论】:

        猜你喜欢
        • 2018-05-19
        • 1970-01-01
        • 2018-02-11
        • 2021-08-16
        • 1970-01-01
        • 2018-10-20
        • 1970-01-01
        • 2017-03-04
        • 2016-11-09
        相关资源
        最近更新 更多