.NET Core 2.0项目中System.Web.Http引用兼容问题求助
解决.NET Core 2.0项目中Microsoft.AspNet.WebApi.Core兼容问题
这个错误的核心原因很明确:Microsoft.AspNet.WebApi.Core 5.2.4是专门为.NET Framework(传统Windows专属框架)开发的包,完全不兼容.NET Core 2.0。.NET Core是重新设计的跨平台框架,Web API的实现逻辑和旧版完全不同,没法直接复用.NET Framework的老包。
下面是具体的解决步骤:
第一步:移除不兼容的旧包
打开包管理器控制台,执行命令:Uninstall-Package Microsoft.AspNet.WebApi.Core或者直接在NuGet包管理器界面找到这个包,点击卸载按钮即可。
第二步:安装.NET Core适配的Web API包
在.NET Core 2.0中,Web API功能已经整合到Microsoft.AspNetCore.Mvc包中,执行对应安装命令:Install-Package Microsoft.AspNetCore.Mvc -Version 2.0.0注意版本号要和你的.NET Core 2.0严格对应,不要安装过高版本的包,避免出现新的兼容问题。
第三步:调整代码适配新API
旧的System.Web.Http命名空间下的类型,需要替换成Microsoft.AspNetCore.Mvc下的对应实现:- 原来的
ApiController基类,现在改用ControllerBase(专门用于Web API,不带视图渲染支持)或Controller,同时加上[ApiController]属性 - 路由规则从
[RoutePrefix]+[HttpGet]的组合,改成直接在控制器上标注[Route("api/[controller]")],配合Action上的[HttpGet("[action]")]或简化的[HttpGet] - 返回类型从
IHttpActionResult替换为IActionResult或更具体的类型(比如OkResult、BadRequestResult)
- 原来的
举个简单的迁移示例:
旧代码:
using System.Web.Http; public class ValuesController : ApiController { [HttpGet] public IHttpActionResult Get() { return Ok(new string[] { "value1", "value2" }); } }
新代码:
using Microsoft.AspNetCore.Mvc; [ApiController] [Route("api/[controller]")] public class ValuesController : ControllerBase { [HttpGet] public IActionResult Get() { return Ok(new string[] { "value1", "value2" }); } }
如果你的项目包含复杂逻辑(比如自定义过滤器、模型验证、依赖注入),需要对应调整为.NET Core的实现方式——比如过滤器要实现IActionFilter接口,依赖注入通过构造函数注入等,这些都是.NET Core生态的标准做法。
内容的提问来源于stack exchange,提问作者Tomáš Čičman
相关产品推荐
相关产品推荐

