WebAPI 2启动遇MethodNotFound Exception(get_MessageHandlers)问题求助
嘿,我之前也踩过这个坑!这个get_MessageHandlers方法找不到的异常,十有八九是Web API相关程序集版本不匹配搞出来的,给你几个靠谱的排查和解决步骤:
统一Web API NuGet包版本
打开NuGet包管理器,检查所有Microsoft.AspNet.WebApi.*开头的包(比如WebApi.Core、WebApi.WebHost这些),确保它们的版本完全一致——哪怕差一个小版本都可能出问题。建议统一升级或降级到Web API 2的稳定版本,比如5.2.9。清理+重建项目
右键解决方案选「清理解决方案」,再选「重建解决方案」,彻底清除旧的程序集文件。也可以手动删掉项目下的bin和obj文件夹,再重新编译,避免残留的旧版本程序集干扰。检查Web.config的绑定重定向
打开项目的Web.config,确认有没有正确的程序集绑定重定向配置,把所有Web API相关程序集都指向同一个版本。比如:<dependentAssembly> <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.2.9.0" newVersion="5.2.9.0" /> </dependentAssembly>如果没有就手动加上,版本号和你安装的NuGet包保持一致。
确认消息处理器注册代码正确
检查WebApiConfig.Register方法里的注册代码,确保是用config.MessageHandlers.Add()添加处理器的,别写错属性名(比如把MessageHandlers写成MessageHandler)。示例代码应该是这样的:public static void Register(HttpConfiguration config) { // 添加自定义消息处理器 config.MessageHandlers.Add(new CustomHandler1()); config.MessageHandlers.Add(new CustomHandler2()); // 其他Web API配置 config.MapHttpAttributeRoutes(); // ...其他路由配置 }排查项目引用的程序集
右键项目→「引用」,查看System.Web.Http这类Web API核心程序集的版本,确保它们和NuGet包的版本一致,没有引用本地的旧版本程序集。如果有本地引用,直接移除,改用NuGet安装的版本。
按这些步骤走下来,基本就能解决这个方法找不到的异常了。
内容的提问来源于stack exchange,提问作者Swanand Pangam

