Web API自定义AuthFilter调用报错:找不到HttpRequestMessage获取方法
这种错误我之前帮不少开发者排查过,大概率是ASP.NET Web API版本不兼容导致的——具体来说,是你项目里引用的System.Web.Http和System.Net.Http程序集版本不匹配,或者存在重复引用的问题。下面给你一步步的解决办法:
1. 统一Web API相关NuGet包版本
打开项目的NuGet包管理器,先卸载所有和ASP.NET Web API相关的包(比如Microsoft.AspNet.WebApi.Core、Microsoft.AspNet.WebApi.Client、Microsoft.AspNet.WebApi.WebHost),然后重新安装同一版本的最新稳定版(比如目前常用的5.2.9版本)。混合不同版本的包是引发这类方法找不到问题的常见原因。
2. 清理重复的程序集引用
右键项目 → 选择「管理NuGet程序包」→ 切换到「已安装」标签,检查有没有重复的System.Web.Http或System.Net.Http引用,有的话卸载多余的。另外,去项目的「引用」列表里确认,没有同时引用NuGet包版本和系统GAC里的旧版本程序集。
3. 配置正确的程序集绑定重定向
打开项目的web.config,确保在<runtime>节点里添加了正确的绑定重定向,强制项目使用统一的程序集版本。示例配置如下(记得把版本号替换成你实际安装的版本):
<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <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> <dependentAssembly> <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" /> </dependentAssembly> </assemblyBinding> </runtime>
4. 清理并重新生成解决方案
做完上面的操作后,右键解决方案 → 选择「清理解决方案」,接着再「生成解决方案」,确保所有程序集都重新编译并引用了正确的版本。
另外,顺便确认下你在global.asax.cs里的筛选器注册代码是否正确,标准的注册方式应该是这样的:
protected void Application_Start() { GlobalConfiguration.Configure(WebApiConfig.Register); // 注册全局Auth筛选器 GlobalConfiguration.Configuration.Filters.Add(new AuthFilterAttribute()); }
完成这些步骤后,再用Postman调用你的Web API,这个“找不到方法”的错误应该就能解决了。
内容的提问来源于stack exchange,提问作者Ankur Gupta

