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来配置路由体系,包括特性路由。具体步骤如下:
- 在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?}"); // }); }
- 在控制器/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
相关产品推荐
相关产品推荐

