如何在ASP.NET Core 7项目中同时构建MVC与Web API?
在ASP.NET Core 7中同一项目同时构建MVC和Web API的实现方案
一、创建基础项目
直接选择创建**ASP.NET Core Web App(MVC)**模板,这个模板默认包含MVC所需的视图、控制器和静态文件支持,后续只需扩展添加API功能即可。
二、配置Program.cs核心代码
ASP.NET Core 7采用顶级语句简化配置,只需确保同时启用MVC和API的服务与路由:
var builder = WebApplication.CreateBuilder(args); // 同时添加MVC(含视图)和API控制器支持 builder.Services.AddControllersWithViews(); // 额外显式添加API控制器服务(可选,AddControllersWithViews已包含该功能,保险起见可添加) builder.Services.AddControllers(); var app = builder.Build(); // 环境相关配置保持默认即可 if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); // 先配置API路由(推荐用属性路由,避免与MVC路由冲突) app.MapControllers(); // 再配置MVC默认路由 app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); app.Run();
三、创建API控制器
在项目的Controllers文件夹下新建API控制器,注意继承ControllerBase并使用属性路由标记:
[ApiController] [Route("api/[controller]")] public class WeatherForecastController : ControllerBase { private static readonly string[] Summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" }; [HttpGet] public IEnumerable<WeatherForecast> Get() { return Enumerable.Range(1, 5).Select(index => new WeatherForecast { Date = DateTime.Now.AddDays(index), TemperatureC = Random.Shared.Next(-20, 55), Summary = Summaries[Random.Shared.Next(Summaries.Length)] }).ToArray(); } } // 配套的实体类 public class WeatherForecast { public DateTime Date { get; set; } public int TemperatureC { get; set; } public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); public string? Summary { get; set; } }
四、验证功能
启动项目后:
- 访问
https://localhost:端口号/Home/Index,能正常显示MVC首页即说明MVC功能正常; - 访问
https://localhost:端口号/api/WeatherForecast,能返回JSON格式的天气数据即说明API功能正常。
常见问题说明
- 路由冲突:API控制器务必使用
[Route]属性路由,MVC控制器用默认路由,两者不会互相干扰; - 旧方案适配:ASP.NET Core 7移除了Startup.cs,所有配置都在Program.cs中完成,不要照搬旧版本的Startup配置方式;
- 控制器基类:API控制器继承
ControllerBase,MVC控制器继承Controller(含视图支持),不要混用。
内容的提问来源于stack exchange,提问作者Ha Thuan
相关产品推荐
相关产品推荐

