【问题标题】:How do I output a string instead of a HTML page?如何输出字符串而不是 HTML 页面?
【发布时间】:2012-06-30 23:40:56
【问题描述】:

当满足一组条件时,我希望能够将简单的字符串输出为文本而不是 HTML 页面。我目前正在使用:

Protected Sub OutputString(ByVal Str As String)
    Dim bytes() As Byte
    bytes = System.Text.Encoding.UTF8.GetBytes(Str)
    Response.ContentType = "text/plain"
    Response.OutputStream.Write(bytes, 0, bytes.Length)
    Response.End()
End Sub

这很好用,完全符合我的要求,但是,Response.End() 会产生异常,并且(我相信)应该尽可能避免。

我想我可以为这段代码使用一个单独的“空”页面,但它更多的是一种解决方法而不是一种解决方案。另外,有人说了一些关于超越 HTML 输出行为的事情(现在不记得在哪里了)。

如果有人能告诉我最好的方法,我将非常感激。

更新: 我找到了这个链接: Response.Redirect(url) ThreadAbortException Solution

它建议使用 HttpContext.Current.ApplicationInstance.CompleteRequest() 并覆盖渲染页面的函数:

Dim DoNotOutputHTML As Boolean = False

Protected Overrides Sub RaisePostBackEvent(sourceControl As IPostBackEventHandler, eventArgument As String)
    If DoNotOutputHTML = False Then
        MyBase.RaisePostBackEvent(sourceControl, eventArgument)
    End If
End Sub

Protected Overrides Sub Render(writer As HtmlTextWriter)
    If DoNotOutputHTML = False Then
        MyBase.Render(writer)
    End If
End Sub

然后您可以通过设置变量 DoNotOutputHTML 来选择是否输出您的 html 页面。

我遇到的唯一问题是 CompleteRequest() 之后的任何代码仍然执行。我可以通过重组我的代码来解决这个问题,尽管如果我不需要它会更整洁(更少的 if/else 块),就像我不需要 response.end()

有什么建议吗?

【问题讨论】:

  • 这不是您问题的答案,但我认为您可以使用 Response.Write 而不是直接写入字节。
  • Response.End() 有哪些例外情况?
  • @minitech 非常正确。我有多笨?哈哈。不知道为什么我没有想到。
  • @Tim Schmelter 我相信这个异常有据可查(也会影响 server.transfer 和 response.redirect,因为它们使用 response.end)。我得到的确切错误是:mscorlib.dll 中发生了“System.Threading.ThreadAbortException”类型的第一次机会异常 mscorlib.dll 中发生了“System.Threading.ThreadAbortException”类型的异常,但未在用户代码中处理跨度>

标签: asp.net .net html vb.net


【解决方案1】:

基本上你需要将响应类型设置为文本,并从页面中删除所有 HTML。

【讨论】:

  • 感谢您的回复。我确实说过这是我的问题中的一个选项,但是,这意味着页面生命周期仍将被处理(即使它是空白的),这将不会尽可能高效。我还想在不执行输出后停止任何代码,就像 response.end() 目前正在做的那样。
【解决方案2】:

最后,我只是使用了 Response.End() 并忽略了异常。似乎工作正常。

【讨论】:

    猜你喜欢
    • 2017-03-16
    • 1970-01-01
    • 2012-06-26
    • 2021-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-24
    相关资源
    最近更新 更多