2010-07-27 144 views
2

我正在写一些代码,我需要使用我自己的HttpResponse对象来捕获另一个对象上的方法的输出,该对象将HttpResponse作为参数。问题是,这个其他对象(我不能修改)调用HttpResponse.End(),这会导致“对象引用未设置为对象的实例”异常被抛出。我能做些什么呢?为什么我的自定义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:你调用的对象是空的。 at System.Web.HttpResponse.End() at ConsoleApplication1.Module1.Main()in C:\ Documents and Settings \ joe.user \ Local Settings \ Application Data \ Temporary Projects \ ConsoleApplication1 \ Module1.vb:line 10

+1

Response.End()通常会引发ThreadAbortException。你可以包括堆栈跟踪?可以更好地帮助我们理解为什么你会得到一个空引用异常。 – mikemanne 2010-07-27 21:10:22

+0

我已经发布了例外的文字。正如你所看到的,没有'ThreadAbortException'。 – 2010-07-28 13:19:29

回答

2

Response.End()失败,因为您不在ASP.Net环境中,而是在控制台/其他non-asp.net应用程序中。我的猜测是(并通过作弊和使用反射器确认它)Response.End引用HttpContext.Current(或等效本地副本),它是null,因此它会引发该错误。

调用Response.End是其他代码的意思。我知道你不能改变它,但它应该可能是调用Response.Flush,如果它真的很担心。

+1

其他调用代码来自MS Windows Identity Foundation! – 2010-07-28 20:44:30

+4

我不在乎它是否是System.God,我仍然认为它的意思。 – Peter 2010-07-29 14:40:21

1

如果您在Visual Studio中运行您的代码,请尝试在没有调试器的情况下执行您的代码(Ctrl F5):应该不会引发异常。它为我工作。

+0

但它不适合我。我仍然渴望得到一个可行的解决方案。 Sharepoint 2010在这里。 – Renan 2013-07-03 17:42:32

相关问题