System.Web.Http.Ok无法解析求助:已安装AspNetWebApi 5.2.3
排查
System.Web.Http.Ok 无法解析的问题 我之前在MVC项目里集成Web API时也碰到过这个坑,大概率是这几个环节出了问题,一步步来排查:
先确认命名空间和控制器类型
Ok()是Web API专属的ApiController类的方法,如果你用的是普通MVC的Controller,肯定找不到这个方法。首先要做两件事:- 在代码文件顶部导入命名空间:
using System.Web.Http; - 确保你的控制器继承的是
ApiController,而不是MVC的Controller,比如:public class TestApiController : ApiController { public IHttpActionResult Get() { return Ok("测试内容"); } }
- 在代码文件顶部导入命名空间:
检查程序集引用是否正常
有时候NuGet安装可能会因为缓存或冲突,没自动添加正确的程序集引用。右键项目→引用,看看有没有System.Web.Http这个引用,版本是不是5.2.3。如果没有的话:- 打开NuGet包管理器,卸载现有的
Microsoft.AspNet.WebApi相关包 - 重新安装完整的
Microsoft.AspNet.WebApi包(别只装WebApi.Core,它是给Self-Host场景用的,MVC项目需要完整包)
- 打开NuGet包管理器,卸载现有的
确认Web API已在项目中配置
MVC项目默认不带Web API的路由配置,你需要手动添加:- 在
App_Start文件夹新建WebApiConfig.cs文件,内容如下:public static class WebApiConfig { public static void Register(HttpConfiguration config) { // 启用特性路由 config.MapHttpAttributeRoutes(); // 配置默认路由 config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); } } - 在
Global.asax的Application_Start方法里注册Web API(注意要放在MVC路由注册之前):protected void Application_Start() { AreaRegistration.RegisterAllAreas(); WebApiConfig.Register(GlobalConfiguration.Configuration); // 先注册Web API FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); }
- 在
清理重建项目,解决缓存问题
Visual Studio的项目缓存有时候会搞鬼,试试:- 右键项目→清理
- 右键解决方案→清理解决方案
- 然后右键解决方案→重建解决方案,再看代码能不能识别
Ok()
最后检查目标框架和包版本一致性
右键项目→属性→应用程序,确认目标框架确实是.NET Framework 4.6.1。另外打开NuGet包管理器,检查所有Web API相关包(比如Microsoft.AspNet.WebApi.WebHost、Microsoft.AspNet.WebApi.Core)的版本是否都是5.2.3,版本不一致也会导致引用异常。
内容的提问来源于stack exchange,提问作者VSB
相关产品推荐
相关产品推荐

