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

Как получить ссылку на HttpResponse в ASP.NET MVC?

Я вызываю стороннюю библиотеку, которая принимает System.Web.HttpResponse. Я вижу, что у меня есть HttpResponseBase, но не HttpResponse, как в веб-формах.

Есть ли способ получить HttpResponse? Используя MVC 3.

[Изменить]: Я пытаюсь сделать это в методе контроллера. Также скорректированный корпус.

4b9b3361

Ответ 1

Если вам нужно взаимодействовать с системами, которые принимают несовместимые типы, вы можете получить доступ к текущему HttpContext с помощью статического свойства System.Web.HttpContext.Current. HttpResponse просто висит оттуда через свойство Response.

Ответ 2

В приложении mvc вы можете использовать HttpContext.ApplicationInstance.Response. Это помогло мне получить HttpResponse в приложении MVC.

Ответ 3

Нет, но ваш HttpResponseBase, вероятно, является HttpResponseWrapper, который содержит HttpResponse внутри него. Все методы HttpResponse доступны из HttpResponseBase.

Если вам нужен доступ к HttpResponse, вы можете добавить ссылку на него в HttpContext.Items в IHttpHandler или где-то ранее в жизненном цикле ASP.NET. Событие BeginRequest было бы хорошим моментом для этого.

Ваш HttpContext.Items ссылается на тот же словарь, что ссылки HttpContextBase.Items, поэтому у вас будет доступ ко всем этим элементам в MVC3

Чтобы уточнить,

Это HttpResponseWrapper, но нет открытого доступа для HttpResponse. Таким образом, нет прямой ссылки. Чтобы сделать ссылку, доступную напрямую, прежде чем среда решит начать предоставлять вам оболочку вместо базовой ссылки, создайте обработчик события для события HttpApplication.BeginRequest. У вашего обработчика будет ссылка на объект HttpContext. Установите HttpContext.Items["HttpRequest"] = HttpContext.Request. Затем в вашем контроллере вы сможете получить доступ к HttpRequest ссылке RequestContext.HttpContext.Items["HttpRequest"].