Подтвердить что ты не робот

Преобразование OwinHttpRequestContext в HttpContext? (IHttpHandler и websockets)

Я пытаюсь реализовать веб-сокеты в моем приложении, которое в настоящее время реализует веб-API RESTful. Я хочу, чтобы некоторые части информации могли быть открыты через соединение с веб-сокетом, поэтому я пытаюсь выяснить, как обновить обычный HTTP-запрос к подключению веб-сокета.

Я пытаюсь выполнить этот учебник

Проблема, с которой я столкнулась, - это мой контроллер, который обрабатывает запрос Get наследует от ApiController, и я пытаюсь это сделать:

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

Проблема заключается в моем HttpContext.Current всегда null, и я не знаю почему. Кажется, что нет такой вещи, как HttpContext. Я вижу, однако, из запроса, который приходит, что это HttpRequestContext, который приходит с запросом. Связаны ли эти два объекта и есть ли способ получить доступ к методу .IsWebSocketRequest, чтобы я мог попробовать и обновить запрос к подключению веб-сокета?

Мой контроллер и то, что я пытаюсь сделать:

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

^ HttpContext.Current всегда имеет значение null. Мой контроллер наследует исключительно от ApiController

4b9b3361

Ответ 1

Чтобы получить доступ к Httpcontext в MVC ApiController, используйте этот код.

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

Это приведет к выходу HttpContext из запроса, если он будет предоставлен.