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

ASP.NET Core 2.1中如何使用'MapControllers'?缺失相关路由方法需安装什么包?

在ASP.NET Core 2.1中配置特性路由(替代MapControllers)

你遇到的问题核心是:UseEndpoints和MapControllers是ASP.NET Core 3.0及以后版本才引入的Endpoint Routing特性,ASP.NET Core 2.1并不支持这些方法。下面给你讲清楚2.1里怎么正确配置特性路由,以及确认你需要的NuGet包。

一、ASP.NET Core 2.1的特性路由配置方式

在2.1中,我们是通过UseMvc来配置路由体系,包括特性路由。具体步骤如下:

  1. 在Startup.cs中启用MVC路由
    在Configure方法里,你需要用app.UseMvc()来替代不存在的UseEndpoints。如果只想启用特性路由(不需要传统约定路由),可以直接使用空的UseMvc();如果需要兼容约定路由,可以保留默认路由模板:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    // 先添加其他必要中间件(如UseStaticFiles、UseAuthentication等)
    
    // 方式1:仅启用特性路由(推荐API项目使用)
    app.UseMvc();

    // 方式2:同时支持约定路由和特性路由
    // app.UseMvc(routes =>
    // {
    //     routes.MapRoute(
    //         name: "default",
    //         template: "{controller=Home}/{action=Index}/{id?}");
    // });
}
  1. 在控制器/Action上标记特性路由
    给控制器或Action添加路由特性即可启用特性路由,比如API控制器的写法:
[Route("api/[controller]")]
[ApiController] // ASP.NET Core 2.1已支持该特性,自动启用API友好行为
public class ValuesController : ControllerBase
{
    [HttpGet("{id:int}")] // 带约束的特性路由
    public IActionResult Get(int id)
    {
        return Ok(new { Id = id, Message = "Hello from 2.1" });
    }
}

二、确认你需要的NuGet包

你当前安装的包已经足够,但需要确保所有ASP.NET Core相关包的版本都是2.1.x的稳定版本:

  • Microsoft.AspNetCore.Mvc:这个包是核心,已经包含了MVC和路由的全部必要功能,无需额外安装Microsoft.AspNetCore.Routing(会被间接引用)。
  • 如果存在版本不一致的情况(比如混装了更高版本的包),建议统一所有ASP.NET Core相关包的版本为2.1.x,避免出现兼容性问题。

三、如果想使用MapControllers怎么办?

如果你的目标是使用MapControllers这种Endpoint Routing的简洁写法,那你需要升级项目到ASP.NET Core 3.0或更高版本。升级后,你就可以使用app.UseEndpoints(endpoints => endpoints.MapControllers())来配置特性路由,但这需要你调整项目的目标框架(比如从.NET Core 2.1升级到.NET Core 3.1或.NET 5+),并同步更新所有相关NuGet包的版本。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 08:52:37