You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Framework转.NET Core Web API时如何获取HttpRequestMessage

问题解决路径说明

  • 首先明确:.NET Core / .NET 5+ 的Web API体系已经抛弃了原来.NET Framework里的HttpRequestMessage/HttpResponseMessage核心对象模型,改用Microsoft.AspNetCore.Http命名空间下的HttpRequest/HttpResponse,二者是完全独立的实现,没有官方的直接转换方法,也不建议强制做转换。
  • 你原来用到的actionContext.Request.GetConfiguration()是.NET Framework下System.Web.Http的特有API,对应的功能在.NET Core中已经被全新的配置体系和DI容器替代,不需要依赖HttpRequestMessage就能实现。

具体实现方案

针对你使用AspNetCore.CacheOutput的CacheOutputOverrideAttribute场景,有两种可行的实现方式:

方案1:通过DI直接获取配置(推荐)

CacheOutputOverrideAttribute继承自ActionFilterAttribute,你可以直接从ActionExecutingContext中拿到HttpContext,再从DI容器中取出你需要的配置对象:

public override void OnActionExecuting(ActionExecutingContext context)
{
    // 从请求服务容器中获取配置对象
    var configuration = context.HttpContext.RequestServices.GetRequiredService<IConfiguration>();
    // 原来的config对应的配置项都可以直接从configuration中读取
    var yourConfigValue = configuration["YourConfigKey"];
    
    // 其余原有逻辑...
    base.OnActionExecuting(context);
}

注意:如果需要用到原来HttpConfiguration里的路由、格式器等配置,对应的.NET Core API都可以通过HttpContext相关属性直接获取,不需要再通过旧的GetConfiguration()入口。

方案2:兼容旧代码强制使用HttpRequestMessage(不推荐)

如果你的旧逻辑大量依赖HttpRequestMessage/HttpResponseMessage,短期内无法重构,可以引用Microsoft.AspNetCore.Mvc.WebApiCompatShim兼容包,通过以下方式构造对应的对象:

public override void OnActionExecuting(ActionExecutingContext context)
{
    var requestMessage = context.HttpContext.Features.Get<HttpRequestMessageFeature>()?.HttpRequestMessage;
    if (requestMessage == null)
    {
        requestMessage = new HttpRequestMessage();
        // 手动填充当前请求的方法、地址、头、内容等信息
        requestMessage.Method = new HttpMethod(context.HttpContext.Request.Method);
        requestMessage.RequestUri = new Uri($"{context.HttpContext.Request.Scheme}://{context.HttpContext.Request.Host}{context.HttpContext.Request.Path}{context.HttpContext.Request.QueryString}");
        // 其余需要的属性填充...
    }
    // 调用原有依赖HttpRequestMessage的逻辑
}

该方案仅作为临时过渡方案,兼容包仅支持到.NET Core 2.1,更高版本.NET不再维护,长期来看建议直接迁移到.NET Core原生API体系。

内容的提问来源于stack exchange,提问作者Lee Z

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 19:24:04