Как я могу получить ссылку на HttpResponse в ASP.NET MVC? - PullRequest
24 голосов
/ 15 марта 2011

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

Есть ли способ получить HttpResponse? Использование MVC 3.

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

Ответы [ 3 ]

36 голосов
/ 15 марта 2011

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

11 голосов
/ 11 декабря 2013

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

4 голосов
/ 15 марта 2011

Нет, но ваш 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"].

...