一連の基準が満たされたときに、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()の後のコードがまだ実行されていることです。これを回避するには、コードを再構築しますが、response.end()を使用しない場合のように、必要がない場合はより適切になります(if / elseブロックが少なくなります)。
助言がありますか?