【发布时间】: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