我希望能够在满足一组条件时输出一个简单的字符串作为文本而不是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()
有什么建议吗?
答案 0 :(得分:0)
基本上,您需要将响应类型设置为文本,并从页面中删除所有HTML。
答案 1 :(得分:0)
最后,我只使用了Response.End()并忽略了异常。似乎工作正常。