我开始对API使用Owin自托管主机,但现在我正尝试修复一些测试,但由于Owin不支持HttpContext.Current而开始失败

现在,我陷入了从HttpRequestBase获得IOwinContext的困境。这是我在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变量返回null,我不知道出了什么问题。

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

最佳答案

我猜您必须为webApi使用System.web托管,这就是为什么要运行测试的原因。现在,由于您已经开始使用托管HttpContext的OwinSelf,因此图中不再显示。这就是您变得空的原因。

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

不幸的是,您必须删除/更改上述自托管测试。

10-05 19:21