Asp.net 如何输出字符串而不是HTML页面?

Asp.net 如何输出字符串而不是HTML页面?,asp.net,.net,html,vb.net,Asp.net,.net,Html,Vb.net,当满足一组条件时,我希望能够将一个简单的字符串输出为文本,而不是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,

当满足一组条件时,我希望能够将一个简单的字符串输出为文本,而不是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输出行为的事情(不记得现在在哪里)

如果有人能告诉我最好的方法,我将不胜感激

更新: 我找到了这个链接:

建议使用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()一样


有什么建议吗?

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

最后,我只使用response.end()并忽略了异常。似乎很好。

这不是对你问题的回答,但我认为你可以使用
响应。写
而不是直接写字节。你对
Response.End()
有什么例外?@minitech非常正确。我有多笨?哈哈。我不知道为什么我没有想到这一点。@Tim Schmelter我相信这个异常已经有了很好的记录(在使用response.end时也会影响server.transfer和response.redirect)。我得到的确切错误是:mscorlib.dll中发生了“System.Threading.ThreadAbortException”类型的第一次意外异常mscorlib.dll中发生了“System.Threading.ThreadAbortException”类型的异常,但未在用户代码中处理感谢您的响应。我确实说过这是我的问题中的一个选项,但是,这意味着页面生命周期仍将被处理(即使它是空的),这将不会像可能的那样高效。我还想在输出后停止任何不执行的代码,这就是response.end()目前的工作方式。