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
相关产品推荐
相关产品推荐

