.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

