Как получить ссылку на HttpResponse в ASP.NET MVC?
Я вызываю стороннюю библиотеку, которая принимает System.Web.HttpResponse
. Я вижу, что у меня есть HttpResponseBase
, но не HttpResponse
, как в веб-формах.
Есть ли способ получить HttpResponse
? Используя MVC 3
.
[Изменить]:
Я пытаюсь сделать это в методе контроллера. Также скорректированный корпус.
Ответы
Ответ 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"]
.