| Fixa till Doctype för html5 i EpiServer |
|
|
|
|
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: 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 <>< runAllManagedModulesForAllRequests="true"> < name="InitializationModule" type="EPiServer.Web.InitializationModule, EPiServer" preCondition="managedHandler" /> < name="Initializer" type="EPiServer.Scheduler.Initializer, EPiServer.Scheduler" preCondition="managedHandler" /> < name="WorkflowRuntime" type="EPiServer.WorkflowFoundation.WorkflowSystem, EPiServer.WorkflowFoundation" preCondition="managedHandler" /> < name="UrlRewriteModule" type="EPiServer.Web.UrlRewriteModule, EPiServer" preCondition="managedHandler" /> < name="ImageVault" type="ImageStoreNET.PluginStartup, ImageVault.EPiServer5" /> < name="IIS5XWildCardExtensionFix" type="ImageStoreNET.Classes.IIS5XWildCardExtensionFix, ImageStoreNET" /> < name="Doctype" type="Maritima.Classes.HttpModule.DoctypeModule, Maritima" />
Kommentarer (2)
![]() 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
|
we provide a wow gold, wow gold