如何从 IOwinContext 获取 HttpRequestBase

How to get HttpRequestBase from IOwinContext

我开始为我的 API 使用 Owin 自托管,现在我正在尝试修复一些测试,这些测试开始失败,因为 Owin 不支持 HttpContext.Current

现在我无法从 IOwinContext 获取 HttpRequestBase。这是我在 Owin 之前使用的旧代码:

public static HttpRequestBase GetRequestBase(this HttpRequestMessage request)
{
    return ((HttpContextWrapper)request.Properties["MS_HttpContext"]).Request;
}

这是我基于 this answer:

的尝试
public static HttpRequestBase GetRequestBase(this HttpRequestMessage request)
{
    var context = request.GetOwinContext();

    HttpContextBase httpContext = context.Get<HttpContextBase>(typeof(HttpContextBase).FullName); // <---- Returns null

    return httpContext.Request;
}

问题是 httpContext 变量 returns null 我不知道出了什么问题。

有人知道如何使用 Owin 获取 HttpRequestBase 吗?

我猜你一定是在为你的 webApi 使用 System.web 托管,这就是你的测试 运行 的原因。现在,由于您已经开始使用托管 HttpContext 的 OwinSelf,图片中不再存在。这就是你变得空的原因。

这就是我们有从 HttpContext/Requests 获取 OwinContext 的扩展方法但没有从 OwinContext 获取 HttpContext 的扩展方法的原因。

很遗憾,您必须 remove/change 进行上述自托管测试。