.NET WebApi迁移.NET Core 3.1时HttpConfigurationKey兼容替代方案
问题根因
代码中引用的System.Web.Http命名空间下的HttpPropertyKeys、HttpConfiguration类型均属于.NET Framework平台下ASP.NET Web API 2的内置组件,和ASP.NET Core 3.1重构后的请求处理管线完全不兼容,不存在可直接安装替换的同命名空间兼容包。
解决方案
旧代码往HttpRequestMessage.Properties字典写入HttpConfigurationKey对应配置实例的逻辑,本质是向请求链路注入全局Web API运行配置,在ASP.NET Core 3.1中可根据实际使用场景选择对应处理方式:
- 若代码逻辑为构造
HttpRequestMessage做接口测试、内部请求转发:
直接删除添加该属性的代码行即可。ASP.NET Core 3.1的请求处理管线不会识别来自旧框架的HttpConfigurationKey常量,HttpRequestMessage实例不需要绑定这个键对应的配置对象即可正常使用。如果需要沿请求链路传递自定义参数,直接使用自定义键名写入Properties字典即可,示例:HttpRequestMessage request = new HttpRequestMessage(); // 替换为实际需要传递的自定义配置,无需构造旧版HttpConfiguration实例 request.Properties.Add("CustomConfigKey", yourConfigInstance); - 若代码逻辑为实现旧版
HttpConfiguration承载的全局过滤器注册、路由配置、消息处理器挂载等功能:
这类配置在ASP.NET Core 3.1中需迁移到Startup类中完成注册:- 全局过滤器注册到
ConfigureServices方法中MVC选项的Filters集合 - 路由规则在
Configure方法的UseEndpoints中间件中配置 - 自定义消息处理逻辑改写为中间件实现
- 全局过滤器注册到
- 若项目存在大量依赖旧版Web API类型的遗留代码、暂时无法全量改写:
可安装官方兼容包Microsoft.AspNetCore.Mvc.WebApiCompatShim,该包适配了大部分旧版Web API的常用类型与方法签名,但注意该包未提供System.Web.Http.HttpConfiguration的完全等价实现,涉及该类型的逻辑仍需按Core的原生模式调整。
内容的提问来源于stack exchange,提问作者z1234
相关产品推荐
相关产品推荐

