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

ASP.NET Core带文化路由时,后台区域跳转至非区域链接失效

问题根源

在区域视图中生成非区域链接时,路由系统无法自动获取culture参数,导致匹配默认路由失败,最终输出空白href。因为当前视图处于Admin区域下,路由上下文默认携带area=Admin,当显式指定area=""后,必须同时提供culture参数才能匹配到定义的默认路由(该路由要求首段为culture)。

解决办法

方法1:生成链接时显式传递culture

直接从当前路由数据中获取culture并传入链接生成方法,确保路由匹配所需的参数完整:

<!-- Tag Helper方式 -->
<a asp-controller="Home" asp-action="Privacy" asp-area="" asp-route-culture="@ViewContext.RouteData.Values["culture"]">Public</a>

<!-- RouteLink方式 -->
@Html.RouteLink("Public via RouterLink", "Default", new { 
    action = "Index", 
    controller = "Home", 
    culture = ViewContext.RouteData.Values["culture"] 
}) 

<!-- ActionLink方式 -->
@Html.ActionLink("Public via ActionLink", "Index", "Home", new { 
    area = "", 
    culture = ViewContext.RouteData.Values["culture"] 
}, null)

方法2:优化路由默认值配置

修改默认路由的配置,显式指定area的默认值为空,帮助路由系统更精准匹配非区域路由:

app.MapControllerRoute(
    name: "default",
    pattern: "{culture:length(2)}/{controller=Home}/{action=Index}/{id?}",
    defaults: new { area = string.Empty }
);

注:这种方式的可靠性略低于方法1,部分场景下路由上下文的culture参数可能无法被自动继承,推荐优先使用方法1。

预期效果

修改后,非区域链接将生成正确的URL,示例如下:

<a href="/en/Home/Privacy">Public</a>
<a href="/en/Home/Index">Public via RouterLink</a> 
<a href="/en/Home/Index">Public via ActionLink</a>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 12:50:03