Почему мой пользовательский HttpResponse создает исключение для HttpResponse.End ()? - PullRequest
2 голосов
/ 28 июля 2010

Я пишу некоторый код, в котором мне нужно использовать свой собственный объект HttpResponse для захвата вывода метода другого объекта, который принимает HttpResponse в качестве параметра. Проблема заключается в том, что этот другой объект (который я не могу изменить) вызывает HttpResponse.End(), что вызывает исключение «Ссылка на объект не установлена ​​для экземпляра объекта». Что я могу с этим поделать?

Dim myStringbuilder As New StringBuilder
Dim myStringWriter As New IO.StringWriter(myStringbuilder)
Dim myResponse As New Web.HttpResponse(myStringWriter)

someObject.doStuffWithHttpResponse(myResponse) ' calls myResponse.End() and crashes

Вот еще несколько полных сведений об ошибке, выданных из следующего кода в консольном приложении:

Dim myStringbuilder As New StringBuilder
Dim myStringWriter As New IO.StringWriter(myStringbuilder)
Dim myResponse As New Web.HttpResponse(myStringWriter)
Try
 myResponse.End()
Catch ex As Exception
 Console.WriteLine(ex.ToString)
End Try

Вот текст исключения:

System.NullReferenceException: ссылка на объект не установлена ​​для экземпляра объекта. в System.Web.HttpResponse.End () в ConsoleApplication1.Module1.Main () в C: \ Documents and Settings \ joe.user \ Локальные настройки \ Данные приложения \ Временные проекты \ ConsoleApplication1 \ Module1.vb: строка 10

Ответы [ 2 ]

2 голосов
/ 28 июля 2010

Response.End () завершается ошибкой, потому что вы находитесь не в среде ASP.Net, а в консоли / другом приложении non-asp.net.Я предположил (и подтвердил это путем обмана и использования Reflector), что Response.End ссылается на HttpContext.Current (или эквивалентную локальную копию), который является нулевым, поэтому он выдает эту ошибку.

вызов Response.End является добрымсреднего значения этого другого кода.Я знаю, что вы не можете изменить его, но он, вероятно, должен вызывать Response.Flush, если это действительно так беспокоит.

1 голос
/ 28 января 2011

Если вы выполняете свой код в Visual Studio, попробуйте выполнить его без включенного отладчика (Ctrl F5): исключение не должно вызываться.Это сработало для меня.

...