ASP.NET Core 8.0 Web API接口被成功调用但Ajax响应报错,寻求问题排查帮助
ASP.NET Core 8.0 Web API接口被成功调用但Ajax响应报错,寻求问题排查帮助
看起来你遇到的是典型的跨域请求+JSONP格式不匹配问题,我来帮你一步步拆解排查:
核心问题:JSONP格式不兼容
你在Ajax里设置了dataType: 'jsonp',但你的Web API返回的是标准JSON({"success":true})——而JSONP要求后端返回被回调函数包裹的JSON(比如callback({"success":true}))。浏览器拿到纯JSON后,无法按照JSONP的规则解析,直接触发了错误回调,这就是你只看到模糊"error"的原因。
修复步骤1:调整Ajax请求配置
把请求改成标准JSON格式,去掉错误的请求头配置:
function AjaxCall(functionCall, url, data, type) { $.ajax({ url: "https://localhost:7286/api/" + url, // 删掉这个错误请求头:Access-Control-Allow-Origin是服务器返回给客户端的,不是客户端发送的 // headers: { 'Access-Control-Allow-Origin': '*', }, contentType: "application/json; charset=utf-8", data: data, type: type, // 补上你传入的type参数,之前代码里遗漏了这个配置 crossDomain: true, dataType: 'json', // 把jsonp改成标准json success: function (responseData) { // 修正回调调用方式,把响应数据正确传给回调函数 functionCall(responseData); }, error: function (xhr, status, error) { // 打印更详细的错误信息,方便排查 console.log("请求状态码:", xhr.status); console.log("服务器返回内容:", xhr.responseText); console.log("错误详情:", error); } }); }
修复步骤2:配置后端CORS跨域支持
你的前端在IIS、后端在localhost的Visual Studio里,属于跨域请求(域名/端口不同),必须在ASP.NET Core后端启用CORS:
- 在
Program.cs中添加CORS服务配置:
builder.Services.AddCors(options => { options.AddPolicy("AllowIISFrontend", policy => { // 替换成你的IIS网站实际地址,比如http://localhost:8080(根据你的IIS配置调整) policy.WithOrigins("http://你的IIS站点地址") .AllowAnyHeader() .AllowAnyMethod(); }); });
如果只是测试,可以暂时用policy.AllowAnyOrigin(),但生产环境一定要指定具体前端域名,避免安全风险。
- 在中间件管道里启用CORS(必须放在
UseRouting之后、UseAuthorization之前):
app.UseCors("AllowIISFrontend");
额外排查技巧
打开浏览器开发者工具 -> 网络标签,查看Login请求的细节:
- 确认请求状态码是否为200
- 检查响应头里是否存在
Access-Control-Allow-Origin字段 - 查看响应体是否是预期的
{"success":true}
这些信息能帮你快速定位是跨域配置问题,还是请求格式问题。
按照上面的步骤调整后,你的Ajax请求应该就能正常获取响应了。
内容来源于stack exchange
相关产品推荐
相关产品推荐

