2

我正在编写一些代码,其中我需要使用我自己的HttpResponse对象来捕获另一个对象上的方法的输出,该对象以 anHttpResponse作为参数。问题是,这个其他对象(我无法修改)调用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\Local Settings\Application Data\Temporary Projects\ConsoleApplication1\Module1.vb:line 10

4

2 回答 2

2

Response.End() 失败,因为您不在 ASP.Net 环境中,而是在控制台/其他非 asp.net 应用程序中。我的猜测是(并通过作弊和使用反射器确认)Response.End 引用了 HttpContext.Current(或等效的本地副本),它是空的,所以它抛出了那个错误。

调用 Response.End 是其他代码的一种意思。我知道您无法更改它,但如果真的那么担心,它可能应该调用 Response.Flush 。

于 2010-07-28T19:51:51.300 回答
1

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

于 2011-01-28T16:12:48.853 回答