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

自定义路由生成URL时无法正确携带用户Culture值的问题

问题原因与解决方案

你的问题出在自定义路由的默认值配置方式上:你在culture-privacy路由的defaults参数里显式指定了culture = "en",这会导致路由生成URL时,强制使用这个默认值,而忽略当前请求路由数据中已有的culture值。

修正后的路由配置

将culture的默认值直接嵌入路由模板,而非放在defaults中:

endpoints.MapControllerRoute(
    name: "culture-privacy",
    pattern: "{culture=en}/h/p", // 默认值直接写在路由模板里
    defaults: new { controller = "Home", action = "Privacy" });

endpoints.MapControllerRoute(
    name: "default-privacy",
    pattern: "h/p",
    defaults: new { controller = "Home", action = "Privacy" });

原理说明

当路由模板写成{culture=en}/h/p时:

  • 如果当前请求没有传递culture参数(比如访问http://localhost),路由会使用默认值en,生成/en/h/p(或者匹配到default-privacy路由生成/h/p,取决于路由匹配顺序);
  • 如果当前请求的路由数据中已经存在culture值(比如访问http://localhost/fr),Url.ActionLink会自动复用这个值,生成正确的/fr/h/p链接。

额外优化建议

你配置了RouteDataRequestCultureProvider,其实可以移除自定义的CultureFilter——RouteDataRequestCultureProvider会自动从路由数据中读取culture并设置请求的当前文化,不需要手动通过过滤器修改线程文化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 21:11:29