CSharp - C# 将OwinHttpRequestContext转换为 HttpContext ( IHttpHandler和 websockets )?

  显示原文与译文双语对照的内容

在目前实现的应用程序中,我试图实现一个 RESTful Web API 。 我希望某些信息能够被web套接字连接公开,所以我想知道如何将正常的HTTP请求升级到web套接字。

我尝试着遵循这个教程。

我的问题是我的控制器处理来自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继承

时间: 原作者:

要访问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,这将从请求中获取。

...