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

ASP.NET Core同名控制器下如何让a标签助手路由到MVC而非API控制器

问题原因

你的API控制器父类定义了[Route("api/[controller]/[action]")]特性路由,特性路由的优先级高于传统的控制器路由,因此锚标签助手匹配同名控制器时,会优先命中API控制器,生成带api前缀的链接。


可行解决方案

方案1:给默认路由配置命名空间优先级(全局生效,推荐)

修改传统路由的配置,通过dataTokens指定MVC控制器所在的命名空间,路由系统会优先匹配该命名空间下的控制器,无需修改视图代码:

endpoints.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}",
    // 替换为你实际的MVC控制器所在命名空间
    dataTokens: new { Namespaces = new[] { "YourApp.Controllers.Mvc" } }
);

方案2:在标签助手中显式指定使用传统默认路由(单标签生效,灵活可控)

给a标签添加asp-route="default"属性,强制使用名称为default的传统路由生成链接,不会匹配API的特性路由:

<a asp-route="default" asp-controller="persons" asp-action="Index">People directory</a>

方案3:调整特性路由优先级

给MVC控制器添加路由特性,并设置更低的Order值(值越小优先级越高),让MVC控制器的路由优先级高于API控制器:

// 给所有MVC控制器的父类加该特性即可,无需每个控制器重复加
[Route("[controller]/[action]", Order = -1)]
public class BaseMvcController : Controller
{
    // ...
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 09:45:01