代码之家  ›  专栏  ›  技术社区  ›  Vivian River

为什么我的自定义httpResponse在httpResponse.end()上引发异常?

  •  2
  • Vivian River  · 技术社区  · 15 年前

    我正在写一些代码,我需要在其中使用自己的代码 HttpResponse 对象捕获另一个对象上方法的输出 HTTP协议 作为参数。问题是,另一个对象(我无法修改)调用 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()上 在c:\documents and settings\joe.user\local settings\application data\temporary projects\consoleapplication1\module1.vb:line 10中的consoleapplication1.module1.main()。

    2 回复  |  直到 14 年前
        1
  •  2
  •   Peter    15 年前

    response.end()失败,因为您的不在ASP.NET环境中,而是在控制台/其他非ASP.NET应用程序中。我的猜测是(并通过欺骗和使用Reflector来确认)那个响应。end引用了httpContext.current(或等效的本地副本),它为空,所以它抛出了那个错误。

    调用response.end是其他代码的一种方式。我知道你不能改变它,但它可能是呼叫响应。如果真的那么担心,冲。

        2
  •  1
  •   Symon    14 年前

    如果您正在Visual Studio中运行代码,请尝试在不打开调试器的情况下执行代码(ctrl f5):然后不应引发异常。这对我很有用。

    推荐文章