HttpRequest.Filter 속성
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
현재 입력 스트림을 읽을 때 사용할 필터를 가져오거나 설정합니다.
public:
property System::IO::Stream ^ Filter { System::IO::Stream ^ get(); void set(System::IO::Stream ^ value); };
public System.IO.Stream Filter { get; set; }
member this.Filter : System.IO.Stream with get, set
Public Property Filter As Stream
속성 값
필터로 사용되는 Stream 개체입니다.
예외
지정한 Stream가 잘못된 경우
예제
다음 코드 예제에서는 두 개의 새 클래스를 만들고 해당 클래스를 QQQ1
QQQ2
필터링합니다 InputStream. 애플리케이션에서 모든 ASP.NET 웹 페이지에 대 한 모든 입력은 필터링 할 수 있도록 ASP.NET 애플리케이션의 디렉터리에서 Global.asax 파일에 클래스를 배치 합니다.
<%@ Page language="c#" %>
<%@ Import namespace="System.Text" %>
<%@ Import namespace="System.IO" %>
<script runat="server">
// This code is to be added to a Global.asax file.
public void Application_BeginRequest()
{
Request.Filter = new QQQ1(Request.Filter);
Request.Filter = new QQQ2(Request.Filter);
}
class QQQ1 : Stream
{
private Stream _sink;
public QQQ1(Stream sink)
{
_sink = sink;
}
public override bool CanRead
{
get { return true; }
}
public override bool CanSeek
{
get { return false; }
}
public override bool CanWrite
{
get { return false; }
}
public override long Length
{
get { return _sink.Length; }
}
public override long Position
{
get { return _sink.Position; }
set { throw new NotSupportedException(); }
}
public override int Read(byte[] buffer, int offset, int count)
{
int c = _sink.Read(buffer, offset, count);
for (int i = 0; i < count; i++)
{
if (buffer[offset+i] >= 'a' && buffer[offset+i] <= 'z')
buffer[offset+i] -= ('a'-'A');
}
return c;
}
public override long Seek(long offset, System.IO.SeekOrigin direction)
{
throw new NotSupportedException();
}
public override void SetLength(long length)
{
throw new NotSupportedException();
}
public override void Close()
{
_sink.Close();
}
public override void Flush()
{
_sink.Flush();
}
public override void Write(byte[] buffer, int offset, int count)
{
throw new NotSupportedException();
}
}
class QQQ2 : Stream
{
private Stream _sink;
public QQQ2(Stream sink)
{
_sink = sink;
}
public override bool CanRead
{
get { return true; }
}
public override bool CanSeek
{
get { return false; }
}
public override bool CanWrite
{
get { return false; }
}
public override long Length
{
get { return _sink.Length; }
}
public override long Position
{
get { return _sink.Position; }
set { throw new NotSupportedException(); }
}
public override int Read(byte[] buffer, int offset, int count)
{
int c = _sink.Read(buffer, offset, count);
for (int i = 0; i < count; i++)
{
if (buffer[i] == 'E')
buffer[i] = (byte)'*';
else if (buffer[i] == 'e')
buffer[i] = (byte)'#';
}
return c;
}
public override long Seek(long offset, System.IO.SeekOrigin direction)
{
throw new NotSupportedException();
}
public override void SetLength(long length)
{
throw new NotSupportedException();
}
public override void Close()
{
_sink.Close();
}
public override void Flush()
{
_sink.Flush();
}
public override void Write(byte[] buffer, int offset, int count)
{
throw new NotSupportedException();
}
}
/*____________________________________________________________________
This ASP.NET page uses the request filter to modify all text sent by the
browser in Request.InputStream. To test the filter, use this page to take
the POSTed output from a data entry page using a tag such as:
<form method="POST" action="ThisTestPage.aspx">
<%@ PAGE LANGUAGE = C# %>
<%@ IMPORT namespace="System.IO" %>
<html>
<Script runat=server>
void Page_Load()
{
// Create a Stream object to capture entire InputStream from browser.
Stream str = Request.InputStream;
// Find number of bytes in stream.
int strLen = (int)str.Length;
// Create a byte array to hold stream.
byte[] bArr = new byte[strLen];
// Read stream into byte array.
str.Read(bArr,0,strLen);
// Convert byte array to a text string.
String strmContents="";
for(int i = 0; i < strLen; i++)
strmContents = strmContents + (Char)bArr[i];
// Display filtered stream in browser.
Response.Write("Contents of Filtered InputStream: <br>" + strmContents);
}
______________________________________________________________________*/
</script>
<%@ Page language="VB" %>
<%@ Import namespace="System.Text" %>
<%@ Import namespace="System.IO" %>
<script runat="server">
' This example is meant to be added to a Global.asax file.
Sub Application_BeginRequest()
Request.Filter = New QQQ1(Request.Filter)
Request.Filter = New QQQ2(Request.Filter)
End Sub
' The class QQQ1 changes all lower case alpha chars to upper case.
Public Class QQQ1
Inherits Stream
Private _sink As Stream
Public Sub New(sink As Stream)
_sink = sink
End Sub
' All MustOverride interface members must be included.
Public Overrides ReadOnly Property CanRead() As Boolean
Get
Return True
End Get
End Property
Public Overrides ReadOnly Property CanSeek() As Boolean
Get
Return False
End Get
End Property
Public Overrides ReadOnly Property CanWrite() As Boolean
Get
Return False
End Get
End Property
Public Overrides ReadOnly Property Length() As Long
Get
Return _sink.Length
End Get
End Property
Public Overrides Property Position() As Long
Get
Return _sink.Position
End Get
Set
Throw New NotSupportedException()
End Set
End Property
Public Overrides Function Read(ByVal buffer() As Byte, ByVal offset As Integer, ByVal count As Integer) As Integer
Dim c As Integer = _sink.Read(buffer, offset, count)
Dim i As Integer
For i = 0 To count - 1
If buffer(offset+i) >= Asc("a") And buffer(offset+i) <= Asc("z") Then
buffer(offset+i) = buffer(offset+i) - (Asc("a")-Asc("A"))
End If
Next i
Return c
End Function
Public Overrides Function Seek(ByVal offset As Long, ByVal direction As System.IO.SeekOrigin) As Long
Throw New NotSupportedException()
End Function
Public Overrides Sub SetLength(ByVal length As Long)
Throw New NotSupportedException()
End Sub
Public Overrides Sub Close()
_sink.Close()
End Sub
Public Overrides Sub Flush()
_sink.Flush()
End Sub
Public Overrides Sub Write(ByVal buffer() As Byte, ByVal offset As Integer, ByVal count As Integer)
Throw New NotSupportedException()
End Sub
End Class
' The class QQQ2 changes all E characters to asterisks.
class QQQ2
Inherits Stream
Private _sink As Stream
Public Sub New(sink As Stream)
_sink = sink
End Sub
' All MustOverride interface members must be included.
Public Overrides ReadOnly Property CanRead() As Boolean
Get
Return true
End Get
End Property
Public Overrides ReadOnly Property CanSeek() As Boolean
Get
Return False
End Get
End Property
Public Overrides ReadOnly Property CanWrite() As Boolean
Get
Return False
End Get
End Property
Public Overrides ReadOnly Property Length() As Long
Get
Return _sink.Length
End Get
End Property
Public Overrides Property Position() As Long
Get
Return _sink.Position
End Get
Set
Throw New NotSupportedException()
End Set
End Property
Public Overrides Function Read(ByVal buffer() As Byte, ByVal offset As Integer, ByVal count As Integer) As Integer
Dim c As Integer = _sink.Read(buffer, offset, count)
Dim i As Integer
For i = 0 To count-1
If buffer(i) = Asc("E") Then
buffer(i) = Asc("*")
End If
Next i
Return c
End Function
Public Overrides Function Seek(ByVal offset As Long, ByVal direction As System.IO.SeekOrigin) As Long
Throw New NotSupportedException()
End Function
Public Overrides Sub SetLength(length As Long)
Throw New NotSupportedException()
End Sub
Public Overrides Sub Close()
_sink.Close()
End Sub
Public Overrides Sub Flush()
_sink.Flush()
End Sub
Public Overrides Sub Write(ByVal buffer() As Byte, ByVal offset As Integer, ByVal count As Integer)
Throw New NotSupportedException()
End Sub
End Class
'____________________________________________________________________
' This ASP.NET page uses the request filter to modify all text sent by the
' browser in Request.InputStream. To test the filter, use this page to take
' the POSTed output from a data entry page using a tag such as:
' <form method="POST" action="ThisTestPage.aspx">
'<%@ PAGE LANGUAGE = VB %>
'<%@ IMPORT namespace="System.IO" %>
'<html>
'<Script runat=server>
' Sub Page_Load()
' Dim str As Stream, strmContents As String
' Dim counter, strLen As Integer
' Create a Stream object.
' str = Request.InputStream
' Find number of bytes in stream.
' strLen = CInt(str.Length)
' Create a byte array.
' Dim strArr(strLen) As Byte
' Read stream into byte array.
' str.Read(strArr,0,strLen)
' Convert byte array to a text string.
' For counter = 0 To strLen-1
' strmContents = strmContents & Chr(strArr(counter))
' Next counter
' Response.Write("Contents of Filtered InputStream: " & strmContents)
' End Sub
' </html>
</script>