webForumDet fria alternativet

Validering W3C

.NET

2 svar · 230 visningar · startad av Daniel78

Medlem sedan jan. 2001200 inlägg
Frågan#1
Medlem sedan nov. 200013 890 inlägg
#2

Men det fina men ASP.NET är ju att du inte är bunden till ett språk.
Du kan ju använda det C#-exempel som finns här på wF även om dina andra sidor är i VB.

http://www.webforum.nu/showthread.php?s=&forumid=191&threadid=77146

Medlem sedan jan. 2001200 inlägg
#3

Ok, men hur funkar det då, ska jag kompilera C# exemplet till en egen dll och importera den eller, och hur i så fall?

För övrigt så konverterade jag C# exemplet till VB genom en konverterare. Denna kod har jag sedan lagt i global.asax och det funkar bra, förutom att jag måste avmarkera Buffer.BlockCopy(buffer, offset, data, 0, count) eftersom detta ej verkar vara tillgängligt i VB?

Här är VB klassen

Public Class XHTMLStrictFilter
    Inherits Stream
    Private _sink As Stream
    Private _position As Long

    Private Shared _regForm As New Regex("<form .*name=.* .*>", RegexOptions.Compiled Or RegexOptions.IgnoreCase)
    Private Shared _regNameReplace As New Regex("name=[^ ]*", RegexOptions.Compiled Or RegexOptions.IgnoreCase)
    Private Shared _regViewState As New Regex("<input type=""hidden"" name=""__VIEWSTATE"" value="".*"" />", RegexOptions.Compiled Or RegexOptions.IgnoreCase)

    Private _formFix As Boolean
    Private _viewStateFix As Boolean

    Public Sub New(ByVal sink As Stream)
        _sink = sink
    End Sub 'New

    ' The following members of Stream must be overriden. 

    Public Overrides ReadOnly Property CanRead() As Boolean
        Get
            Return True
        End Get
    End Property

    Public Overrides ReadOnly Property CanSeek() As Boolean
        Get
            Return True
        End Get
    End Property

    Public Overrides ReadOnly Property CanWrite() As Boolean
        Get
            Return True
        End Get
    End Property

    Public Overrides ReadOnly Property Length() As Long
        Get
            Return 0
        End Get
    End Property

    Public Overrides Property Position() As Long
        Get
            Return _position
        End Get
        Set(ByVal Value As Long)
            _position = Value
        End Set
    End Property

    Public Overrides Function Seek(ByVal offset As Long, ByVal direction As System.IO.SeekOrigin) As Long
        Return _sink.Seek(offset, direction)
    End Function 'Seek

    Public Overrides Sub SetLength(ByVal length As Long)
        _sink.SetLength(length)
    End Sub 'SetLength

    Public Overrides Sub Close()
        _sink.Close()
    End Sub 'Close

    Public Overrides Sub Flush()
        _sink.Flush()
    End Sub 'Flush

    Public Overrides Function Read(ByVal buffer() As Byte, ByVal offset As Integer, ByVal count As Integer) As Integer
        Return _sink.Read(buffer, offset, count)
    End Function 'Read

    ' The Write method actually does the filtering. 
    Public Overrides Sub Write(ByVal buffer() As Byte, ByVal offset As Integer, ByVal count As Integer)
        Dim data() As Byte

        If Not _formFix Or Not _viewStateFix Then
            Dim htmlOutput As String = System.Text.UTF8Encoding.UTF8.GetString(buffer)
            Dim length As Integer = htmlOutput.Length
            If Not _formFix And _regForm.IsMatch(htmlOutput) Then
                Dim formMatch As String = _regForm.Match(htmlOutput).Value
                htmlOutput = Regex.Replace(htmlOutput, formMatch, _regNameReplace.Replace(formMatch, ""), RegexOptions.IgnoreCase)
                _formFix = True
            End If
            If Not _viewStateFix And _regViewState.IsMatch(htmlOutput) Then
                Dim viewStateMatch As String = _regViewState.Match(htmlOutput).Value
                htmlOutput = Regex.Replace(htmlOutput, viewStateMatch, "<div>" + viewStateMatch + "</div>", RegexOptions.IgnoreCase)
                _viewStateFix = True
            End If
            data = System.Text.UTF8Encoding.UTF8.GetBytes(htmlOutput)
            count -= length - htmlOutput.Length
        Else
            data = New Byte(count) {}
            'Buffer.BlockCopy(buffer, offset, data, 0, count)
        End If
        _sink.Write(data, 0, count)
    End Sub
End Class
260 ms totalt · 4 externa anrop · v20260731065814-full.2f471f9e
131 ms — deklarationer (db)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)