我开始使用Owin self host作为我的API,现在我正在尝试修复一些开始失败的测试,因为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吗?
答案 0 :(得分:1)
我猜你必须为你的webApi使用System.web托管,这就是你的测试运行的原因。现在,既然你已经开始使用OwinSelf托管,那么HttpContext就不再适用了。这就是你得到null的原因。
这就是我们有扩展方法从HttpContext / Requests获取OwinContext的原因,但是没有扩展方法从OwinContext获取HttpContext。
不幸的是,你必须删除/更改以上的自托管测试。