调用异步方法抛出HttpResponseException时触发Method Not Found异常
咱们来拆解下这个问题:你在调用异步Send方法时,偏偏在抛出HttpResponseException那行触发了Method Not Found异常,而且修改throw相关代码后异常情况变化,核心原因基本和程序集版本不匹配或者类型引用的兼容性问题脱不了干系,具体分析和解决办法如下:
问题成因分析
HttpResponseException的类型兼容性问题:这个异常类型最早属于System.Web.Http(ASP.NET Web API),但在.NET Core/.NET 5+之后的框架中,该类型被移除或替换。如果你的项目目标框架是较新的.NET版本,却仍在引用旧框架的HttpResponseException,编译时可能无报错,但运行时CLR找不到对应的类型构造函数或方法,就会抛出Method Not Found。- 程序集版本冲突:即使是ASP.NET Framework项目,如果解决方案内不同项目引用的
System.Web.Http版本不一致,编译时用的是某个版本,但运行时加载的是另一个版本,也会导致方法/类型找不到。
具体解决办法
- 替换为兼容的异常类型:
如果是.NET Core/.NET 5+项目,直接放弃HttpResponseException,改用框架原生支持的类型或自定义异常:// 方案1:使用HttpRequestException(支持传入状态码) throw new HttpRequestException($"请求失败,状态码:{(int)response.StatusCode}", null, response.StatusCode); // 方案2:自定义异常类,保留完整的HttpResponseMessage信息 public class CustomHttpResponseException : Exception { public HttpResponseMessage Response { get; } public CustomHttpResponseException(HttpResponseMessage response) : base($"请求失败,状态码:{(int)response.StatusCode}") { Response = response; } } // 抛出自定义异常 throw new CustomHttpResponseException(response); - 统一程序集引用版本:
若是ASP.NET Framework项目,打开NuGet包管理器,检查所有项目的Microsoft.AspNet.WebApi.Core(包含HttpResponseException的包)版本是否一致,统一升级或降级到相同版本,避免版本冲突。 - 验证目标框架兼容性:
确认项目目标框架与使用的异常类型匹配:比如.NET Core/.NET 5+没有HttpResponseException,不要硬用;ASP.NET Framework则确保引用了正确的Web API包。 - 清理缓存重新生成:
旧编译缓存可能导致依赖版本混乱,手动删除项目的bin和obj文件夹,重新生成整个解决方案,确保所有依赖正确复制到输出目录。
快速验证方法
临时注释掉抛出HttpResponseException的代码,运行方法看是否正常执行。如果此时没有Method Not Found异常,就完全可以确定问题出在HttpResponseException的引用上,直接使用上述替换方案即可。
内容的提问来源于stack exchange,提问作者MarcusTheShogun
相关产品推荐
相关产品推荐

