2010-07-27 92 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