如何从IOwinContext获取HttpRequestBase

时间:2015-05-20 18:54:04

标签: c# .net asp.net-web-api asp.net-web-api2 owin

我开始使用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吗?

1 个答案:

答案 0 :(得分:1)

我猜你必须为你的webApi使用System.web托管,这就是你的测试运行的原因。现在,既然你已经开始使用OwinSelf托管,那么HttpContext就不再适用了。这就是你得到null的原因。

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

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