【问题标题】:Problem with jQuery post to ASP.NET Core controllerjQuery 发布到 ASP.NET Core 控制器的问题
【发布时间】:2020-01-10 02:15:05
【问题描述】:

我已经在 stackoverflow 上查看了这个solution,但我无法解决我的问题。

HomeController 我有一个名为 Audit 的方法,我想通过 jQuery 从 /Home/Index 页面的脚本发布该方法。控制器看起来像:

public class HomeController : Controller
{
  [HttpPost]
  [ValidateAntiForgeryToken]

  public JsonResult Audit([FromBody] JObject jObject)
  {
       if (jObject != null)
       {
           return Json("success");
       }
       return Json("failed");
  }
}

在 /Home/Index 页面的 javascript 文件中,我尝试以如下方式将 JSON 对象发布到该审计:

var auditData = {};
$(document).ready(function(){
    var request = $.getJSON('http://www.geoplugin.net/json.gp', function (responseData, status) {
        auditData = {
            Latitude : responseData.geoplugin_latitude,
            Longitude : responseData.geoplugin_longitude
        };

        $.post('Audit', auditData, function (response) {
            console.log(response);
        });
    });
});

我希望将 auditData 对象作为 JObject 发布到 /Home/Audit 中,但出现了问题。我认为控制器或 $.post 方法存在问题。我该如何解决这个问题?

【问题讨论】:

  • 你调试过请求看看错误是什么吗?我可以看到您没有传递防伪令牌,因此如果没有其他问题,该属性将导致问题
  • @RoryMcCrossan 调试说:加载资源失败:服务器响应状态为 404(未找到)
  • 那是你的第一个问题。 'Audit' 路径无效。我建议尝试'/Home/Audit'

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


【解决方案1】:

您的帖子 URL 错误,您需要将要回发的数据命名为 jObject 以匹配您在控制器中定义的内容。

$.post('@Url.Action("audit", "home", new { area = "" })', { jObject: auditData }, 
  function (response) {
    console.log(response);
});

【讨论】:

    【解决方案2】:

    你当前的代码有多个问题,下面一一检查:

    1. 根据 Rory 的建议,您的请求 url 错误,应该是 Home/Audit
    2. 如果你发布没有反令牌的请求,你应该删除[ValidateAntiForgeryToken]
    3. 您应该使用 json 而不是表单数据发布请求数据。

    代码:

    客户

    @section Scripts{
        <script type="text/javascript">
            var auditData = {};
            $(document).ready(function(){
                    auditData = {
                        Latitude : "l1",
                        Longitude : "l2"
                    };
                $.ajax({
                    type: 'POST',
                    url: 'Home/Audit',
                    data: JSON.stringify(auditData),
                    success: function(data) { alert('data: ' + data); },
                    contentType: "application/json"
                });
            });
        </script>
    }
    

    服务器:

    public class HomeController : Controller
    {
        [HttpPost]
        //[ValidateAntiForgeryToken]
    
        public JsonResult Audit([FromBody]JObject jObject)
        {
            if (jObject != null)
            {
                return Json("success");
            }
            return Json("failed");
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2013-12-15
      • 2014-12-17
      • 2016-11-06
      • 1970-01-01
      • 2021-08-08
      • 1970-01-01
      • 2022-01-01
      • 2018-06-09
      • 1970-01-01
      相关资源
      最近更新 更多