Skip to content

Pirouzfar

Start
Fixa till Doctype för html5 i EpiServer PDF Skriv ut Skicka sidan

Under våran pågående projekt i EpiServer 5 med html5 märkte vi att EpiServer inte känner ingen doctype för html5 och försöker rätta till denna med EPiServerFriendlyUrlRewriteProvider.

 

Från:

<!DOCTYPE HTML PUBLIC "" ""

 

 Till:
"<!DOCTYPE html>"

Lösningen på detta var att implementera en egen httpModule som körs efter att EpiServer EPiServerFriendlyUrlRewriteProvider har körts och bytt ut våran Doctype.

public class DoctypeModule : IHttpModule
{
public void Init(HttpApplication context)
{
context.BeginRequest += new EventHandler(context_BeginRequest);
}

void context_BeginRequest(object sender, EventArgs e)
{
HttpApplication app = sender as HttpApplication;
app.Response.Filter = new DoctypeFilter(app.Response.Filter);
}

public void Dispose()
{


}

#region Stream filter

private class DoctypeFilter : Stream
{

public DoctypeFilter(Stream sink)
{
_sink = sink;
}

private Stream _sink;

#region Properites

public override bool CanRead
{
get { return true; }
}

public override bool CanSeek
{
get { return true; }
}

public override bool CanWrite
{
get { return true; }
}

public override void Flush()
{
_sink.Flush();
}

public override long Length
{
get { return 0; }
}

private long _position;
public override long Position
{
get { return _position; }
set { _position = value; }
}

#endregion

#region Methods

public override int Read(byte[] buffer, int offset, int count)
{
return _sink.Read(buffer, offset, count);
}

public override long Seek(long offset, SeekOrigin origin)
{
return _sink.Seek(offset, origin);
}

public override void SetLength(long value)
{
_sink.SetLength(value);
}

public override void Close()
{
_sink.Close();
}

public override void Write(byte[] buffer, int offset, int count)
{
byte[] data = new byte[count];
Buffer.BlockCopy(buffer, offset, data, 0, count);
string html = System.Text.Encoding.Default.GetString(data);

html = Regex.Replace(html, "<!DOCTYPE HTML PUBLIC \"\" \"\">", @"<!DOCTYPE html>");


byte[] outdata = System.Text.Encoding.Default.GetBytes(html);
_sink.Write(outdata, 0, outdata.GetLength(0));
}

#endregion

}

#endregion

} 



Sedan får man registrera modulen i web.config

<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<add name="InitializationModule" type="EPiServer.Web.InitializationModule, EPiServer" preCondition="managedHandler" />
<add name="Initializer" type="EPiServer.Scheduler.Initializer, EPiServer.Scheduler" preCondition="managedHandler" />
<add name="WorkflowRuntime" type="EPiServer.WorkflowFoundation.WorkflowSystem, EPiServer.WorkflowFoundation" preCondition="managedHandler" />
<add name="UrlRewriteModule" type="EPiServer.Web.UrlRewriteModule, EPiServer" preCondition="managedHandler" />
<add name="ImageVault" type="ImageStoreNET.PluginStartup, ImageVault.EPiServer5" />
<add name="IIS5XWildCardExtensionFix" type="ImageStoreNET.Classes.IIS5XWildCardExtensionFix, ImageStoreNET" />

<add name="Doctype" type="Maritima.Classes.HttpModule.DoctypeModule, Maritima" /> 


 

 

Kommentarer (2)Add Comment
...
skriven av en gäst, maj 03, 2010

we provide a wow gold, wow gold
report abuse
vote down
vote up
Votes: +0
...
skriven av en gäst, juni 10, 2010
Chevrolet Parts at wholesale prices. All of our Chevrolet SSR Parts are OEM quality or better, and most come with a 1 year warranty!
report abuse
vote down
vote up
Votes: +0

Skriv kommentar
quote
bold
italicize
underline
strike
url
image
quote
quote
smile
wink
laugh
grin
angry
sad
shocked
cool
tongue
kiss
cry
smaller | bigger

security code
Skriv bokstäverna ovan i textrutan nedanför


busy
 
Top