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

ASP.NET Core中Ajax POST请求失效问题求助

问题排查与解决方案

咱们先来拆解一下你遇到的问题:手动访问接口能拿到JSON,但AJAX POST请求却触发错误,核心原因出在后端返回的内容格式和AJAX的期望不匹配,还有一些细节需要调整。

具体问题分析

  • 后端返回的是HTML视图而非纯JSON
    你的GetAll Action最后返回的是View("Empty", em),这意味着ASP.NET Core会渲染Empty视图,把em.Message的JSON字符串嵌入到HTML里返回给客户端。此时响应的Content-Type是text/html,而不是AJAX请求指定的application/json。当AJAX尝试把HTML内容解析成JSON时,自然会失败,触发error回调。

  • AJAX的contentType设置冗余(非核心报错原因)
    你设置了contentType: "application/json; charset=utf-8",但后端Action没有接收任何参数,这个设置其实没必要——因为没有JSON格式的请求体需要传递。不过这不是导致报错的直接原因,但可以优化。

修复方案

方案1:修改后端Action,直接返回JSON结果

把原来返回View的逻辑改成返回JsonResult,让ASP.NET Core直接输出JSON格式的响应,同时自动设置正确的Content-Type:

[HttpPost]
public IActionResult GetAll()
{
    List<string> list = new List<string>();
    // 用Path.Combine拼接路径更安全,避免分隔符问题
    string uploadPath = Path.Combine(_hostingEnvironment.WebRootPath, "Uploads", "Images");
    string[] files = Directory.GetFiles(uploadPath);
    
    foreach (string file in files)
        list.Add(Path.GetFileName(file));
    
    // 直接返回JSON数组,ASP.NET Core自动处理序列化和响应头
    return Json(list);
}

方案2:调整AJAX请求(配合方案1优化)

既然后端现在返回纯JSON了,AJAX请求可以简化,同时优化成功回调的提示逻辑(直接alert数组会显示[object Object],需要转成字符串):

$(function () { 
    $.ajax({ 
        type: "POST", 
        url: "/Gallery/GetAll", 
        dataType: "json", 
        success: function (data) { 
            alert(JSON.stringify(data)); 
        }, 
        error: function (xhr) { 
            // 增加错误详情,方便后续调试
            alert("ERROR: " + xhr.responseText); 
        } 
    }); 
});

为什么手动访问看起来正常?

你手动访问时,其实是拿到了渲染后的HTML页面,页面里刚好显示了JSON字符串,所以你误以为是返回了纯JSON。但AJAX请求会严格检查响应的Content-Type和内容格式,因此触发了错误。

内容的提问来源于stack exchange,提问作者Aleksa Ristic

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 06:37:38