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

如何在MVC Core中为控制器方法添加替代路由以兼容旧端点?

解决ASP.NET Core中添加多个路由到同一控制器动作的问题

要让新旧两个端点都能访问CompanyStatusSummary动作,你只需要给这个方法添加多个路由属性即可——你之前的代码只指定了旧路由的[HttpGet],覆盖了默认的动作名称路由,所以才只能通过旧路径访问。

下面是几种可行的实现方式:

方式1:添加多个[HttpGet]属性(推荐)

直接给动作同时标注新、旧两个路由的[HttpGet]属性,两个路由都会映射到同一个方法:

[HttpGet("[Area]/[Controller]/CompanyStatusSummary")] // 新路由
[HttpGet("[Area]/[Controller]/DailyStatusSummary")]   // 旧路由(作为替代)
public async Task<IActionResult> CompanyStatusSummary()
{
    // 你的业务逻辑代码
}

方式2:结合控制器级路由简化写法

如果你的控制器已经标注了[Route("[Area]/[Controller]")]这类路由前缀,那么动作上的路由可以简化为相对路径:

// 控制器顶部的路由前缀
[Route("[Area]/[Controller]")]
public class YourController : Controller
{
    [HttpGet("CompanyStatusSummary")] // 新路由:[Area]/[Controller]/CompanyStatusSummary
    [HttpGet("DailyStatusSummary")]   // 旧路由:[Area]/[Controller]/DailyStatusSummary
    public async Task<IActionResult> CompanyStatusSummary()
    {
        // ...
    }
}

方式3:使用[Route]属性

你也可以用通用的[Route]属性配合HTTP方法约束,效果和[HttpGet]一致:

[Route("[Area]/[Controller]/CompanyStatusSummary", Name = "NewCompanyStatusRoute")]
[Route("[Area]/[Controller]/DailyStatusSummary", Name = "OldDailyStatusRoute")]
[HttpGet]
public async Task<IActionResult> CompanyStatusSummary()
{
    // ...
}

为什么你之前的代码不生效?

当你只给动作添加单个带路由模板的[HttpGet]时,ASP.NET Core会忽略默认的动作名称路由约定,只启用你指定的那个路由。添加多个路由属性后,框架会把所有指定的路由都映射到这个动作,这样新旧端点就都能正常访问了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 19:02:51