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

能否在使用app.Run的非MVC.NET Core应用中使用Web API?

当然可以!你已经离实现目标很近了

你在ConfigureServices里配置AddMvcCore的做法完全正确——这正是在不引入完整MVC框架的前提下,启用Web API核心功能的关键步骤。不过要让控制器能被正确路由到,你需要调整Configure方法里的中间件配置,因为app.Run本身是终端中间件,它会直接处理请求并终止管道,没法让Mvc的路由中间件接手处理控制器请求。

具体调整步骤:

  1. 替换app.Run为Mvc路由中间件
    在Configure方法中,把原来的app.Run(比如类似app.Run(async context => { ... })的代码)替换为Mvc的路由中间件,有两种常见方式:

    方式1:使用UseMvc(适合.NET Core 2.x及更早版本)

    public void Configure(IApplicationBuilder app)
    {
        // 保留你需要的其他中间件,比如UseStaticFiles等
        // app.UseStaticFiles();
    
        // 添加Mvc路由中间件,这会启用控制器路由
        app.UseMvc();
    }
    

    方式2:使用端点路由(推荐.NET Core 3.0+版本)

    这是更现代的路由方式,灵活性更高:

    public void Configure(IApplicationBuilder app)
    {
        // 其他中间件
        // app.UseStaticFiles();
    
        app.UseRouting();
        app.UseEndpoints(endpoints =>
        {
            // 映射所有带有路由属性的控制器
            endpoints.MapControllers();
        });
    }
    
  2. 验证你的控制器配置
    确保你的控制器继承自ControllerBase(Web API控制器的基类,不需要视图支持),比如:

    [Route("/api/test")]
    public class TestController : ControllerBase
    {
        [HttpGet]
        public IActionResult GetTestData()
        {
            return Ok(new { Status = "Success", Data = "Hello from Web API!" });
        }
    }
    

为什么这样可行?

你配置的AddMvcCore已经包含了Web API所需的核心组件:路由解析、请求格式化(你添加的AddJsonFormatters)、内容协商(RespectBrowserAcceptHeader)。只要在管道中添加Mvc的路由中间件,就能让请求正确路由到你的控制器方法,而不需要完整的MVC框架。

现在启动应用,访问/api/test就能得到控制器返回的JSON响应了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:42:22