【问题标题】:How to get HttpRequestBase from IOwinContext如何从 IOwinContext 获取 HttpRequestBase
【发布时间】: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


【解决方案1】:

我猜您的 webApi 必须使用 System.web 托管,这就是您的测试运行的原因。现在,由于您已经开始使用托管 HttpContext 的 OwinSelf,因此图片中不再存在。这就是你得到空值的原因。

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

很遗憾,您必须删除/更改上述自托管测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-05
    • 1970-01-01
    • 2013-02-22
    • 2010-11-29
    • 2013-03-21
    • 1970-01-01
    相关资源
    最近更新 更多