You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core + jQuery AJAX跨域请求问题:后端对象属性为空

问题分析与解决方案

先给你揪出一个核心错误:你在jQuery AJAX请求里加的 Access-Control-Allow-Origin 是服务器返回的响应头,根本不是前端该发送的请求头!前端硬塞这个头反而会触发额外的预检OPTIONS请求,这大概率是导致后端接收不到数据的元凶之一。

接下来一步步解决问题:

1. 删掉错误的请求头配置

直接把jQuery代码里这行删掉:

headers: { 'Access-Control-Allow-Origin': '*'},

这个头是服务器用来告诉浏览器“允许这个域名跨域请求”的,轮不到前端来发。

2. 修正请求数据的格式

你的后端用了 [FromBody] 特性,这意味着它会直接把请求体里的JSON解析成 FavoriteRequestModel 对象。但你现在是把数据包在了 { obj: obj } 里,相当于给模型多套了一层,后端自然找不到匹配的属性,所有字段就都是空的了。

举个例子,如果你的 FavoriteRequestModel 是:

public class FavoriteRequestModel
{
    public int CountryId { get; set; }
    public bool IsFavorite { get; set; }
}

那你的AJAX请求里的 data 应该改成直接序列化 obj:

data: JSON.stringify(obj), // 去掉外层的{ obj: ... }

3. 确认AJAX的核心配置

你的 contentType: "application/json" 是对的,这个配置告诉服务器“我发的是JSON格式的数据”,刚好和后端的 [FromBody] 匹配。另外 crossDomain: true 如果是同域请求可以不用,但跨域的话保留也没问题。

修正后的完整jQuery代码参考:

$.ajax({
    type: "POST",
    url: "http://localhost:61146/MarkAndUnmarkCountry",
    data: JSON.stringify(obj),
    dataType: "json",
    async: true,
    crossDomain: true,
    contentType: "application/json",
    success: function (data) {
        debugger;
        if (data != null) {
            // 这里处理返回数据
        }
    },
    error: function (err) {
        debugger;
        console.log(err.statusText);
    },
    complete: function () {
        //DropDownUiBinding();
    }
});

4. 确认后端CORS的顺序

你的Startup里的CORS配置是对的,但要注意中间件的顺序:app.UseCors 必须放在 app.UseMvc 前面,否则CORS中间件不会生效,跨域请求还是会出问题。

5. 用浏览器调试工具验证请求

打开浏览器的开发者工具(按F12,切换到Network标签),发送请求后查看:

  • 检查Request Headers里的 Content-Type 是否是 application/json
  • 检查Request Payload里的JSON结构是否和后端的 FavoriteRequestModel 完全匹配

按上面的步骤调整后,后端应该就能正确接收请求数据了。

内容的提问来源于stack exchange,提问作者vijay sahu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:21:01