为什么我的自定义HttpResponse在HttpResponse.End()上抛出异常?
我正在写一些代码,我需要使用我自己的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
Response.End()失败,因为您不在ASP.Net环境中,而是在控制台/其他non-asp.net应用程序中。我的猜测是(并通过作弊和使用反射器确认它)Response.End引用HttpContext.Current(或等效本地副本),它是null,因此它会引发该错误。
调用Response.End是其他代码的意思。我知道你不能改变它,但它应该可能是调用Response.Flush,如果它真的很担心。
其他调用代码来自MS Windows Identity Foundation! – 2010-07-28 20:44:30
我不在乎它是否是System.God,我仍然认为它的意思。 – Peter 2010-07-29 14:40:21
如果您在Visual Studio中运行您的代码,请尝试在没有调试器的情况下执行您的代码(Ctrl F5):应该不会引发异常。它为我工作。
但它不适合我。我仍然渴望得到一个可行的解决方案。 Sharepoint 2010在这里。 – Renan 2013-07-03 17:42:32
Response.End()通常会引发ThreadAbortException。你可以包括堆栈跟踪?可以更好地帮助我们理解为什么你会得到一个空引用异常。 – mikemanne 2010-07-27 21:10:22
我已经发布了例外的文字。正如你所看到的,没有'ThreadAbortException'。 – 2010-07-28 13:19:29