我开始对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。
不幸的是,您必须删除/更改上述自托管测试。