【发布时间】:2015-08-02 04:46:24
【问题描述】:
我开始为我的 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变量返回null我不知道怎么回事。
有人知道如何使用 Owin 获取 HttpRequestBase 吗?
【问题讨论】:
-
您是否设置了断点并使用即时窗口来遍历上下文对象?我假设上下文不为空,但显然 Get 无法在其中找到 HttpContextBase 类。我建议 A) 探索你想要的上下文对象,然后 B) 回到你的请求对象并找到另一种方法来获得你想要的。
-
@AdamHeeg 我试图这样做,但就像 vendettamit 已经解释过的那样,OwinContext 没有 HttpContext 所以我必须弄清楚如何更改我的测试,它们不再需要 HttpRequestBase。
标签: c# .net asp.net-web-api asp.net-web-api2 owin