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

.NET Core 3.1升级至6.0后Web应用Ajax请求异常问题

解决.NET Core 3.1升级到6.0后Ajax POST请求返回页面HTML的问题

刚踩过一模一样的升级坑,结合你的代码来看,问题大概率出在防伪令牌验证或者路由配置变化上,咱们一步步来排查解决:

一、最常见原因:防伪令牌验证拦截了请求

.NET 6对POST请求的防伪验证做了默认强化,如果你没在Ajax请求里携带防伪令牌,服务器会直接拦截请求,重定向到默认页面(这就是你看到返回当前页面HTML的核心原因)。

解决步骤:

  1. 在你的视图页面(比如_Layout.cshtml或者当前业务页面)中添加防伪令牌的元标签:
@inject IAntiforgery Antiforgery
@{
    var antiforgeryToken = Antiforgery.GetAndStoreTokens(Context).RequestToken;
}
<meta name="request-verification-token" content="@antiforgeryToken" />
  1. 修改你的Ajax请求,把令牌加到请求头中:
$.ajax({
    type: 'POST',
    url: "/Home/SamplePostCall",
    // 添加防伪令牌头
    headers: {
        "RequestVerificationToken": $('meta[name="request-verification-token"]').attr('content')
    },
    data: { PostData: "Sample Post Data" },
    success: function(response) {
        console.log(response);
    },
    error: function(err){
        console.log(err);
    }
});

二、检查.NET 6的路由配置是否正确

.NET 6的Program.cs启动配置和3.1差异很大,如果你沿用旧的UseMvc配置,可能导致控制器路由无法匹配,请求最终落到默认页面路由上。

检查Program.cs中的路由配置:

确保有以下代码(通常在app.UseAuthorization();之后):

// 默认路由配置
app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

// 如果你的控制器用了属性路由(比如[Route("[controller]/[action]")]),还要加上:
// app.MapControllers();

三、额外排查点

  • 打开浏览器开发者工具的Network标签,查看该Ajax请求的状态码:如果是302 Found,那100%是防伪令牌的问题;如果是404 Not Found,则是路由配置问题。
  • 确认你的控制器类上没有添加错误的[Route]属性,导致URL匹配错误。

按上面的步骤调整后,你的Ajax请求应该就能正常到达控制器并返回JSON数据了。

内容的提问来源于stack exchange,提问作者Adil Dhada

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 16:20:31