我正在尝试在当前实现RESTful Web API的应用程序中实现Web套接字。我希望某些信息能够通过Web套接字连接公开,因此我试图弄清楚如何将普通的HTTP请求升级到Web套接字连接。
我正在尝试遵循此tutorial
我遇到的问题是处理从ApiController继承的Get请求的 Controller ,而我正在尝试执行以下操作:
if (HttpContext.Current.IsWebSocketRequest)
{
HttpContext.Current.AcceptWebSocketRequest(SomeFunction);
}
return new HttpResponseMessage(HttpStatusCode.SwitchingProtocols);
问题是我的HttpContext.Current始终为null,我不知道为什么。似乎没有HttpContext这样的东西。但是,我确实从请求中看到,它们是请求中附带的HttpRequestContext。这两个对象是否完全相关,并且有什么方法可以访问.IsWebSocketRequest方法,以便尝试将请求升级到Web套接字连接?
我的 Controller 和我要执行的操作:
[HttpGet]
public HttpResponseMessage GetSomething()
{
if (HttpContext.Current.IsWebSocketRequest()){
Console.WriteLine("web socket request..");
}
}
^ HttpContext.Current始终为null。我的 Controller 仅继承自ApiController
最佳答案
要访问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脱离请求。