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

.NET 6+React项目MVC路径映射异常求助

排查步骤与解决方案

1. 确认请求是否到达服务器控制器

在SitemapController.Get()方法开头添加断点或日志输出(比如Console.WriteLine("SitemapController Get hit");),运行项目并触发请求,观察是否执行到此处:

  • 若未执行,说明路由未匹配,跳转至步骤2;
  • 若执行到,说明控制器已命中,跳转至步骤4。

2. 检查路由匹配问题

2.1 修正请求路径大小写

ASP.NET Core路由默认不区分大小写,但部分场景下可能受环境影响,尝试将React请求路径改为大写:

const response = await fetch('Sitemap');

或者在Program.cs中配置统一小写路由规则:

builder.Services.Configure<RouteOptions>(options =>
{
    options.LowercaseUrls = true;
    options.LowercaseQueryStrings = true;
});

2.2 确认控制器路由属性

确保SitemapController的路由属性配置正确,[Route("[controller]")]与[HttpGet]组合会匹配GET /Sitemap或GET /sitemap。若需要兼容带斜杠的请求,可修改为:

[Route("[controller]/")]
[ApiController]
public class SitemapController : ControllerBase
{
    [HttpGet("")] // 匹配空路径,即/Sitemap/
    public IActionResult Get()
    {
        // ...
    }
}

2.3 验证控制器注册

检查Program.cs中是否添加了控制器服务注册,默认ASP.NET Core + React项目应包含以下代码之一:

builder.Services.AddControllers();
// 或
builder.Services.AddControllersWithViews();

如果缺失,控制器将无法被路由系统发现。

3. 排除React客户端路由拦截

打开浏览器开发者工具的Network标签,查看请求/sitemap的详情:

  • 如果请求状态码为200但返回内容是index.html,且请求类型为document,说明React Router客户端路由拦截了请求(比如配置了/sitemap的客户端路由)。此时需要修改React路由配置,避免与服务器路由冲突,或给服务器路由添加前缀(比如将控制器路由改为[Route("api/[controller]")],前端请求改为fetch('/api/sitemap'))。

4. 修复控制器内部逻辑问题

如果控制器已被命中,但返回结果异常:

4.1 修正文件路径

Path.Combine中开头的斜杠会导致路径错误,改为相对路径组合:

var path = Path.Combine(Directory.GetCurrentDirectory(), "App_Data", "sitemap.json");

4.2 正确返回JSON格式

当前代码将JSON字符串作为普通字符串返回,会导致前端解析失败。应直接返回JSON对象而非字符串:

using System.Text.Json;

// ...
var data = System.IO.File.ReadAllText(path);
var jsonObj = JsonSerializer.Deserialize<object>(data);
return Ok(jsonObj);
// 或者直接返回字符串并指定内容类型
// return Content(data, "application/json");

额外验证

对比WeatherForecastController的工作逻辑:

  • 两者路由属性一致,说明路由配置本身无问题;
  • 差异在于返回类型,WeatherForecastController返回强类型集合,框架自动序列化为JSON,而SitemapController直接返回JSON字符串,需调整返回方式确保格式正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 00:15:15