【问题标题】:Converting OwinHttpRequestContext to HttpContext? (IHttpHandler and websockets)将 OwinHttpRequestContext 转换为 HttpContext? (IHttpHandler 和 websockets)
【发布时间】:2015-08-22 09:58:39
【问题描述】:

我正在尝试在当前实现 RESTful Web API 的应用程序中实现 Web 套接字。我希望 Web 套接字连接能够公开某些信息,因此我试图弄清楚如何将正常的 HTTP 请求升级为 Web 套接字连接。

我正在尝试关注这个tutorial

我遇到的问题是处理 Get 请求的控制器继承自 ApiController,我正在尝试这样做:

 if (HttpContext.Current.IsWebSocketRequest)
    {
        HttpContext.Current.AcceptWebSocketRequest(SomeFunction);
    }
    return new HttpResponseMessage(HttpStatusCode.SwitchingProtocols);

问题是我的 HttpContext.Current 始终为空,我不知道为什么。似乎没有 HttpContext 这样的东西。但是,我确实从传入的请求中看到它们是请求附带的 HttpRequestContext 。这两个对象是否完全相关?有什么方法可以访问 .IsWebSocketRequest 方法,以便尝试将请求升级为 Web 套接字连接?

我的控制器和我正在尝试做的事情:

    [HttpGet]
    public HttpResponseMessage GetSomething()    
    {
        if (HttpContext.Current.IsWebSocketRequest()){
             Console.WriteLine("web socket request..");  
        }
    }

^ HttpContext.Current 始终为空。我的控制器仅继承自 ApiController

【问题讨论】:

  • 你是在后台线程中运行的吗?
  • 我的想法是,当请求进入时,它可能会为该特定请求创建一个新线程,这就是它可能为空的原因。这是我刚加入的一个项目,所以我不确定。
  • 你能显示完整控制器的代码吗?我们正在使用 Web API 并且连接与您的代码非常相似,并且 HttpContext.Current 不为空。另外,您是否正在自定义控制器选择?可能有一些自定义代码将其放在@Asad 提到的后台线程上,或者它可能正在重用控制器而不是实例化新控制器。
  • 完成。 HttpContext 始终为空

标签: c# .net sockets http websocket


【解决方案1】:

要访问 MVC ApiController 中的 Httpcontext,请使用此代码。

        if (Request.Properties.ContainsKey("MS_HttpContext"))
        {
            HttpContextWrapper HttpContext = (HttpContextWrapper)Request.Properties["MS_HttpContext"];
            if (HttpContext != null)
            {
                if (HttpContext.IsWebSocketRequest)
                {
                    HttpContext.AcceptWebSocketRequest(SomeFunction);
                }
            }
        }

如果提供了 HttpContext,这将从 Request 中获取。

【讨论】:

  • 它不包含“MS_HttpContext”。我在 Request.Properties 下看到的是“MS_OwinContext”、“MS_RequestContext”、“MS_HttpConfiguration”、“MS_RoutingContext”、“MS_HttpRouteData”等
  • 你有对 System.Web 的引用吗?如果没有,请尝试将其添加到您的项目中。
  • 不会改变任何事情。有 System.Web.Http.
  • 您是否在单独的线程中运行?见stackoverflow.com/questions/8109526/…
猜你喜欢
  • 1970-01-01
  • 2021-07-31
  • 1970-01-01
  • 2021-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多