如何阻止ASP.NET Core移除URL中的"/en/"后缀?
问题分析与解决方案
问题现象
- 基于.NET Core 3.1创建的ASP.NET Core Razor Pages项目,使用Kestrel托管,访问
https://localhost:5001正常。 - 输入
https://localhost:5001/en/回车后,页面重载时/en/会被自动移除,跳回根路径;但/ja/、/hk/等其他语言后缀可正常保留。 - 计划通过中间件从
HttpContext.Request.Path捕获/en/做处理,但因路径被修改无法实现。 - 该问题可复现:新建同类型项目,使用Kestrel而非IIS Express,添加
/en/后缀即可触发。
排查更新
后续排查确认问题与.NET Core 3.1无关:
- 在Visual Studio 2022调试时,使用Microsoft Edge隐私模式首次访问
https://localhost:5001/en/,/en/不会被移除;但后续再次请求时,后缀仍会被移除。 - 推测问题可能与浏览器行为、VS调试会话或系统本地化设置相关。
可能的解决思路
1. 清除浏览器缓存与跨浏览器测试
浏览器可能缓存了/en/路径的跳转记录,或因系统默认语言触发自动重定向:
- 彻底清除当前浏览器的缓存、Cookie及站点数据,再重新测试。
- 切换到Chrome、Firefox等其他浏览器测试,排除Edge特定行为影响。
2. 检查本地化中间件配置
即使排查认为与.NET Core版本无关,仍需确认是否启用了本地化中间件导致默认文化重定向:
- 打开
Startup.cs(.NET Core 3.1),检查是否配置了AddLocalization和UseRequestLocalization。如果默认文化设置为en,框架会自动将/en/重定向到根路径(默认文化无需在URL中保留)。 - 修改配置禁用默认文化重定向:
services.Configure<RequestLocalizationOptions>(options => { var supportedCultures = new[] { "en", "ja", "hk" }; options.SetDefaultCulture("en") .AddSupportedCultures(supportedCultures) .AddSupportedUICultures(supportedCultures) .RedirectToDefaultCulture = false; // 关闭默认文化的自动重定向 });
3. 清理VS调试环境
VS调试会话可能残留进程或缓存数据,导致路径处理异常:
- 停止调试,删除项目的
bin和obj目录,重启VS后重新启动调试。 - 修改
launchSettings.json中的applicationUrl,更换Kestrel监听端口后测试。
4. 排查系统本地化设置
系统默认语言为英文时,可能触发某些隐式跳转逻辑:
- 临时将系统默认语言修改为非英文(如中文),再测试
/en/路径是否仍被移除。
内容的提问来源于stack exchange,提问作者zm-danik
相关产品推荐
相关产品推荐

