ASP.NET MVC 5集成Web API后访问接口404控制器未命中如何解决
ASP.NET MVC5集成Web API访问404问题解决方案
核心原因及对应解决方法
- 路由注册顺序错误
当前代码中MVC路由注册早于Web API路由注册,MVC路由优先级更高,会将/api/web路径识别为MVC框架下Api控制器的web动作,匹配不到对应资源就返回404。
解决方法:调整Global.asax.cs中的注册顺序,将Web API配置注册移到MVC路由注册之前,修改后代码如下:
public class MvcApplication : HttpApplication { protected void Application_Start() { AreaRegistration.RegisterAllAreas(); GlobalConfiguration.Configure(WebApiConfig.Register); // 移至MVC路由注册前 FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); } }
- API控制器不符合规范
Web API控制器必须同时满足两个要求:- 继承
System.Web.Http.ApiController,不能继承MVC的System.Web.Mvc.Controller - 类名必须以
Controller为后缀,访问路径/api/web对应的控制器类名必须为WebController
解决方法:修正控制器定义,正确示例如下:
- 继承
public class WebController : ApiController { // GET: api/Web public IEnumerable<string> Get() { return new string[] { "value1", "value2" }; } }
- 缺少Web API核心依赖
手动向MVC5项目添加Web API时,可能缺失必要的官方组件,导致路由、控制器未被正确加载。
解决方法:在NuGet包管理器中安装Microsoft.AspNet.WebApi.Core和Microsoft.AspNet.WebApi.WebHost两个包,重启项目后重新测试。 - 自定义路由冲突
如果项目中存在匹配/api/前缀的自定义MVC路由、特性路由规则,也会抢占Web API的路由匹配,可暂时注释其他自定义路由,仅保留默认Web API路由定位问题。
内容的提问来源于stack exchange,提问作者Jasmine Ivy
相关产品推荐
相关产品推荐

