### Configure WebMarkupMin Services and Middleware
Source: https://github.com/taritsyn/webmarkupmin/wiki/ASP.NET-Core-Latest
This snippet shows the setup of WebMarkupMin services and the HTTP request pipeline in Program.cs for ASP.NET Core 8+. Ensure UseWebMarkupMin is called before route registration.
```csharp
using WebMarkupMin.AspNetCoreLatest;
…
var builder = WebApplication.CreateBuilder(args);
#region Configure services
IServiceCollection services = builder.Services;
…
// Add WebMarkupMin services.
services.AddWebMarkupMin()
.AddHtmlMinification()
.AddXmlMinification()
.AddHttpCompression()
;
// Add framework services.
services.AddControllersWithViews();
…
#endregion
#region Configure the HTTP request pipeline
var app = builder.Build();
…
app.UseWebMarkupMin();
app.MapControllerRoute(
…
);
#endregion
app.Run();
```
--------------------------------
### Configure WebMarkupMin Services in ASP.NET Core 1.X
Source: https://github.com/taritsyn/webmarkupmin/wiki/ASP.NET-Core-1.X
In the ConfigureServices method of the Startup class, add WebMarkupMin services using extension methods like AddWebMarkupMin, AddHtmlMinification, AddXmlMinification, and AddHttpCompression. This setup is crucial for enabling minification and compression features.
```csharp
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using WebMarkupMin.AspNetCore1;
…
namespace WebMarkupMin.Sample.AspNetCore1.Mvc1
{
public class Startup
{
…
// This method gets called by the runtime.
// Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
…
// Add WebMarkupMin services.
services.AddWebMarkupMin()
.AddHtmlMinification()
.AddXmlMinification()
.AddHttpCompression()
;
// Add framework services.
services.AddMvc();
…
}
// This method gets called by the runtime.
// Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env,
ILoggerFactory loggerFactory)
{
…
app.UseWebMarkupMin();
app.UseMvc(routes =>
{
…
});
}
}
}
```
--------------------------------
### Configure WebMarkupMin Services in ASP.NET Core
Source: https://github.com/taritsyn/webmarkupmin/wiki/ASP.NET-Core-3.1+
Add WebMarkupMin services to the dependency injection container and configure options for minification and compression. This setup allows minification and compression even in development environments.
```csharp
using System.Collections.Generic;
using System.IO.Compression;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using WebMarkupMin.AspNet.Common.Compressors;
using WebMarkupMin.AspNet.Common.UrlMatchers;
using WebMarkupMin.AspNetCore3;
using WebMarkupMin.Core;
using WebMarkupMin.NUglify;
namespace WebMarkupMin.Sample.AspNetCore31.Mvc31
{
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddWebMarkupMin(options =>
{
options.AllowMinificationInDevelopmentEnvironment = true;
options.AllowCompressionInDevelopmentEnvironment = true;
})
.AddHtmlMinification(options =>
{
options.ExcludedPages = new List
{
new WildcardUrlMatcher("/minifiers/x*ml-minifier"),
new ExactUrlMatcher("/contact")
};
HtmlMinificationSettings settings = options.MinificationSettings;
settings.RemoveRedundantAttributes = true;
settings.RemoveHttpProtocolFromAttributes = true;
settings.RemoveHttpsProtocolFromAttributes = true;
options.CssMinifierFactory = new NUglifyCssMinifierFactory();
options.JsMinifierFactory = new NUglifyJsMinifierFactory();
})
.AddXhtmlMinification(options =>
{
options.IncludedPages = new List
{
new WildcardUrlMatcher("/minifiers/x*ml-minifier"),
new ExactUrlMatcher("/contact")
};
XhtmlMinificationSettings settings = options.MinificationSettings;
settings.RemoveRedundantAttributes = true;
settings.RemoveHttpProtocolFromAttributes = true;
settings.RemoveHttpsProtocolFromAttributes = true;
options.CssMinifierFactory = new KristensenCssMinifierFactory();
options.JsMinifierFactory = new CrockfordJsMinifierFactory();
})
.AddXmlMinification(options =>
{
XmlMinificationSettings settings = options.MinificationSettings;
settings.CollapseTagsWithoutContent = true;
})
.AddHttpCompression(options =>
{
options.CompressorFactories = new List
{
new BuiltInBrotliCompressorFactory(new BuiltInBrotliCompressionSettings
{
Level = CompressionLevel.Fastest
}),
new DeflateCompressorFactory(new DeflateCompressionSettings
{
Level = CompressionLevel.Fastest
}),
new GZipCompressorFactory(new GZipCompressionSettings
{
Level = CompressionLevel.Fastest
})
};
});
}
}
}
```
--------------------------------
### Configure Supported HTTP Methods
Source: https://github.com/taritsyn/webmarkupmin/wiki/ASP.NET-Extensions
Change the default behavior to minify and compress only GET requests. Supports specifying multiple HTTP methods.
```csharp
….SupportedHttpMethods = new HashSet { "GET", "POST" };
```
--------------------------------
### Advanced XML Minification with Settings and Logger
Source: https://github.com/taritsyn/webmarkupmin/wiki/XML-Minifier
Shows advanced XML minification using XmlMinifier with custom settings and a logger. This example demonstrates how to configure minification behavior and integrate logging for debugging or monitoring purposes.
```csharp
using System;
using System.Collections.Generic;
using System.Text;
using WebMarkupMin.Core;
using WebMarkupMin.Core.Loggers;
namespace WebMarkupMin.Sample.ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
const string xmlInput = @"
https://webmarkupmin.bsite.net/hourly0.9https://webmarkupmin.bsite.net/minifiersdaily0.7https://webmarkupmin.bsite.net/change-logdaily0.8https://webmarkupmin.bsite.net/contactweekly0.4";
var settings = new XmlMinificationSettings();
var logger = new NullLogger();
var xmlMinifier = new XmlMinifier(settings, logger);
MarkupMinificationResult result = xmlMinifier.Minify(xmlInput,
fileContext: string.Empty,
encoding: Encoding.GetEncoding(0),
generateStatistics: false);
if (result.Errors.Count == 0)
{
Console.WriteLine("Minified content:{0}{0}{1}",
Environment.NewLine, result.MinifiedContent);
}
else
{
IList errors = result.Errors;
Console.WriteLine("Found {0:N0} error(s):", errors.Count);
Console.WriteLine();
foreach (var error in errors)
{
Console.WriteLine("Line {0}, Column {1}: {2}",
error.LineNumber, error.ColumnNumber, error.Message);
Console.WriteLine();
}
}
}
}
}
```
--------------------------------
### Initialize HtmlMinifier with Settings
Source: https://github.com/taritsyn/webmarkupmin/wiki/HTML-Minifier
Shows how to create an instance of HtmlMinifier, passing HTML minification settings, CSS minifier, JS minifier, and a logger to the constructor.
```csharp
var settings = new HtmlMinificationSettings();
var cssMinifier = new CssMinifier();
var jsMinifier = new JavaScriptMinifier();
var logger = new WebMarkupMin.Core.Logger();
var minifier = new HtmlMinifier(settings, cssMinifier, jsMinifier, logger);
```
--------------------------------
### Apply Action Filters to Controller
Source: https://github.com/taritsyn/webmarkupmin/wiki/ASP.NET-4.X-MVC
In version 2.X, action filters can be applied to entire controllers. This example shows applying CompressContent, MinifyHtml, and MinifyXml filters to the HomeController.
```csharp
using System.Web.Mvc;
using WebMarkupMin.AspNet4.Mvc;
namespace WebMarkupMin.Sample.AspNet4.Mvc4.Controllers
{
[CompressContent]
[MinifyHtml]
[MinifyXml]
public class HomeController : Controller
{
// ...
}
}
```
--------------------------------
### Configure WebMarkupMin Options
Source: https://github.com/taritsyn/webmarkupmin/wiki/ASP.NET-Core-6
Demonstrates how to configure various WebMarkupMin options, including minification and compression settings, excluded/included pages, and custom minifier factories.
```csharp
options.AllowMinificationInDevelopmentEnvironment = true;
options.AllowCompressionInDevelopmentEnvironment = true;
})
.AddHtmlMinification(options =>
{
options.ExcludedPages = new List
{
new WildcardUrlMatcher("/minifiers/x*ml-minifier"),
new ExactUrlMatcher("/contact")
};
HtmlMinificationSettings settings = options.MinificationSettings;
settings.RemoveRedundantAttributes = true;
settings.RemoveHttpProtocolFromAttributes = true;
settings.RemoveHttpsProtocolFromAttributes = true;
options.CssMinifierFactory = new NUglifyCssMinifierFactory();
options.JsMinifierFactory = new NUglifyJsMinifierFactory();
})
.AddXhtmlMinification(options =>
{
options.IncludedPages = new List
{
new WildcardUrlMatcher("/minifiers/x*ml-minifier"),
new ExactUrlMatcher("/contact")
};
XhtmlMinificationSettings settings = options.MinificationSettings;
settings.RemoveRedundantAttributes = true;
settings.RemoveHttpProtocolFromAttributes = true;
settings.RemoveHttpsProtocolFromAttributes = true;
options.CssMinifierFactory = new KristensenCssMinifierFactory();
options.JsMinifierFactory = new CrockfordJsMinifierFactory();
})
.AddXmlMinification(options =>
{
XmlMinificationSettings settings = options.MinificationSettings;
settings.CollapseTagsWithoutContent = true;
})
.AddHttpCompression(options =>
{
options.CompressorFactories = new List
{
new BuiltInBrotliCompressorFactory(new BuiltInBrotliCompressionSettings
{
Level = CompressionLevel.Fastest
}),
new DeflateCompressorFactory(new DeflateCompressionSettings
{
Level = CompressionLevel.Fastest
}),
new GZipCompressorFactory(new GZipCompressionSettings
{
Level = CompressionLevel.Fastest
})
};
})
```
--------------------------------
### Cache Compressed Content with OutputCache Directive
Source: https://github.com/taritsyn/webmarkupmin/wiki/ASP.NET-4.X-Web-Forms
Use the `OutputCache` directive with a `CacheProfile` to cache the result of markup minification and HTTP compression. This example caches content for 5 minutes.
```aspx
<%@ Page Title="Change log" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true"
CodeBehind="ChangeLog.aspx.cs" Inherits="WebMarkupMin.Sample.AspNet45.WebForms.ChangeLog" %>
<%@ OutputCache CacheProfile="CacheCompressedContent5Minutes" %>
…
```
--------------------------------
### Advanced WebMarkupMin Configuration Options
Source: https://github.com/taritsyn/webmarkupmin/wiki/ASP.NET-Core-6
Demonstrates advanced configuration options for WebMarkupMin services, including custom compressors and URL matchers, within the `Program.cs` file.
```csharp
using System.IO.Compression;
using WebMarkupMin.AspNet.Common.Compressors;
using WebMarkupMin.AspNet.Common.UrlMatchers;
using WebMarkupMin.AspNetCore6;
using WebMarkupMin.Core;
using WebMarkupMin.NUglify;
…
#region Configure services
…
// Add WebMarkupMin services.
services.AddWebMarkupMin(options =>
{
```
--------------------------------
### Configure WebMarkupMin in ASP.NET Web Pages (_AppStart.cshtml)
Source: https://github.com/taritsyn/webmarkupmin/wiki/ASP.NET-4.X-Extensions
This Razor code configures WebMarkupMin for ASP.NET Web Pages sites using the _AppStart.cshtml file. It includes necessary using statements and sets up minification and compression options similar to the MVC configuration.
```cshtml
…
@using System.Collections.Generic
@using WebMarkupMin.AspNet.Brotli
@using WebMarkupMin.AspNet.Common
@using WebMarkupMin.AspNet.Common.Compressors
@using WebMarkupMin.AspNet.Common.UrlMatchers
@using WebMarkupMin.AspNet4.Common
@using WebMarkupMin.Core
@using WebMarkupMin.MsAjax
@using WebMarkupMin.Yui
@{
…
WebMarkupMinConfiguration configuration =
WebMarkupMinConfiguration.Instance;
configuration.AllowMinificationInDebugMode = true;
configuration.AllowCompressionInDebugMode = true;
IHtmlMinificationManager htmlMinificationManager =
HtmlMinificationManager.Current;
htmlMinificationManager.ExcludedPages = new List
{
new ExactUrlMatcher("/Contact")
};
HtmlMinificationSettings htmlMinificationSettings =
```
--------------------------------
### Advanced WebMarkupMin Configuration Imports
Source: https://github.com/taritsyn/webmarkupmin/wiki/ASP.NET-Core-Latest
This snippet includes necessary using directives for advanced configuration of WebMarkupMin services, including compressors and URL matchers.
```csharp
using System.IO.Compression;
using WebMarkupMin.AspNet.Common.Compressors;
using WebMarkupMin.AspNet.Common.UrlMatchers;
using WebMarkupMin.AspNetCoreLatest;
using WebMarkupMin.Core;
using WebMarkupMin.NUglify;
…
```
--------------------------------
### Register WebMarkupMinConfig in Global.asax
Source: https://github.com/taritsyn/webmarkupmin/wiki/ASP.NET-4.X-Extensions
This C# code snippet shows how to call the WebMarkupMinConfig.Configure method within the Application_Start event in the Global.asax file for ASP.NET MVC applications. This ensures the configuration takes effect.
```csharp
using System.Web;
…
using System.Web.Routing;
using WebMarkupMin.AspNet4.Common;
namespace WebMarkupMin.Sample.AspNet4.Mvc4
{
public class MvcApplication : HttpApplication
{
protected void Application_Start()
{
…
RouteConfig.RegisterRoutes(RouteTable.Routes);
WebMarkupMinConfig.Configure(WebMarkupMinConfiguration.Instance);
…
}
}
}
```
--------------------------------
### Configure WebMarkupMin Services in ASP.NET Core
Source: https://github.com/taritsyn/webmarkupmin/wiki/ASP.NET-Core-1.X
This snippet shows how to add and configure WebMarkupMin services, including HTML, XHTML, XML minification, and HTTP compression. It's essential to call this before route registration methods.
```csharp
using System.Collections.Generic;
using System.IO.Compression;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using WebMarkupMin.AspNet.Brotli;
using WebMarkupMin.AspNet.Common.Compressors;
using WebMarkupMin.AspNet.Common.UrlMatchers;
using WebMarkupMin.AspNetCore1;
using WebMarkupMin.Core;
using WebMarkupMin.NUglify;
namespace WebMarkupMin.Sample.AspNetCore1.Mvc1
{
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddWebMarkupMin(options =>
{
options.AllowMinificationInDevelopmentEnvironment = true;
options.AllowCompressionInDevelopmentEnvironment = true;
})
.AddHtmlMinification(options =>
{
options.ExcludedPages = new List
{
new WildcardUrlMatcher("/minifiers/x*ml-minifier"),
new ExactUrlMatcher("/contact")
};
HtmlMinificationSettings settings = options.MinificationSettings;
settings.RemoveRedundantAttributes = true;
settings.RemoveHttpProtocolFromAttributes = true;
settings.RemoveHttpsProtocolFromAttributes = true;
options.CssMinifierFactory = new NUglifyCssMinifierFactory();
options.JsMinifierFactory = new NUglifyJsMinifierFactory();
})
.AddXhtmlMinification(options =>
{
options.IncludedPages = new List
{
new WildcardUrlMatcher("/minifiers/x*ml-minifier"),
new ExactUrlMatcher("/contact")
};
XhtmlMinificationSettings settings = options.MinificationSettings;
settings.RemoveRedundantAttributes = true;
settings.RemoveHttpProtocolFromAttributes = true;
settings.RemoveHttpsProtocolFromAttributes = true;
options.CssMinifierFactory = new KristensenCssMinifierFactory();
options.JsMinifierFactory = new CrockfordJsMinifierFactory();
})
.AddXmlMinification(options =>
{
XmlMinificationSettings settings = options.MinificationSettings;
settings.CollapseTagsWithoutContent = true;
})
.AddHttpCompression(options =>
{
options.CompressorFactories = new List
{
new BrotliCompressorFactory(new BrotliCompressionSettings
{
Level = 1
}),
new DeflateCompressorFactory(new DeflateCompressionSettings
{
Level = CompressionLevel.Fastest
}),
new GZipCompressorFactory(new GZipCompressionSettings
{
Level = CompressionLevel.Fastest
})
};
});
}
}
}
```
--------------------------------
### Basic XML Minification with Statistics
Source: https://github.com/taritsyn/webmarkupmin/wiki/XML-Minifier
Demonstrates basic XML minification using XmlMinifier. It includes generating minification statistics to show the original and minified sizes and the percentage saved. This is useful for understanding the effectiveness of the minification.
```csharp
using System;
using System.Collections.Generic;
using WebMarkupMin.Core;
namespace WebMarkupMin.Sample.ConsoleApplication
{
class Program
{
private static void Main(string[] args)
{
const string xmlInput = @"
https://webmarkupmin.bsite.net/hourly0.9https://webmarkupmin.bsite.net/minifiersdaily0.7https://webmarkupmin.bsite.net/change-logdaily0.8https://webmarkupmin.bsite.net/contactweekly0.4";
var xmlMinifier = new XmlMinifier();
MarkupMinificationResult result = xmlMinifier.Minify(xmlInput,
generateStatistics: true);
if (result.Errors.Count == 0)
{
MinificationStatistics statistics = result.Statistics;
if (statistics != null)
{
Console.WriteLine("Original size: {0:N0} Bytes",
statistics.OriginalSize);
Console.WriteLine("Minified size: {0:N0} Bytes",
statistics.MinifiedSize);
Console.WriteLine("Saved: {0:N2}%",
statistics.SavedInPercent);
}
Console.WriteLine("Minified content:{0}{0}{1}",
Environment.NewLine, result.MinifiedContent);
}
else
{
IList errors = result.Errors;
Console.WriteLine("Found {0} error(s):", errors.Count);
Console.WriteLine();
foreach (var error in errors)
{
Console.WriteLine("Line {0}, Column {1}: {2}",
error.LineNumber, error.ColumnNumber, error.Message);
Console.WriteLine();
}
}
}
}
}
```
--------------------------------
### Configure WebMarkupMin Services
Source: https://github.com/taritsyn/webmarkupmin/wiki/ASP.NET-Core-Latest
Add WebMarkupMin services to the application's service container and configure various minification and compression options. This includes enabling minification and compression in development environments and specifying custom settings for HTML, XHTML, and XML.
```csharp
services.AddWebMarkupMin(options =>
{
options.AllowMinificationInDevelopmentEnvironment = true;
options.AllowCompressionInDevelopmentEnvironment = true;
})
.AddHtmlMinification(options =>
{
options.ExcludedPages = new List
{
new WildcardUrlMatcher("/minifiers/x*ml-minifier"),
new ExactUrlMatcher("/contact")
};
HtmlMinificationSettings settings = options.MinificationSettings;
settings.RemoveRedundantAttributes = true;
settings.RemoveHttpProtocolFromAttributes = true;
settings.RemoveHttpsProtocolFromAttributes = true;
options.CssMinifierFactory = new NUglifyCssMinifierFactory();
options.JsMinifierFactory = new NUglifyJsMinifierFactory();
})
.AddXhtmlMinification(options =>
{
options.IncludedPages = new List
{
new WildcardUrlMatcher("/minifiers/x*ml-minifier"),
new ExactUrlMatcher("/contact")
};
XhtmlMinificationSettings settings = options.MinificationSettings;
settings.RemoveRedundantAttributes = true;
settings.RemoveHttpProtocolFromAttributes = true;
settings.RemoveHttpsProtocolFromAttributes = true;
options.CssMinifierFactory = new KristensenCssMinifierFactory();
options.JsMinifierFactory = new CrockfordJsMinifierFactory();
})
.AddXmlMinification(options =>
{
XmlMinificationSettings settings = options.MinificationSettings;
settings.CollapseTagsWithoutContent = true;
})
.AddHttpCompression(options =>
{
options.CompressorFactories = new List
{
new BuiltInBrotliCompressorFactory(new BuiltInBrotliCompressionSettings
{
Level = CompressionLevel.Fastest
}),
new DeflateCompressorFactory(new DeflateCompressionSettings
{
Level = CompressionLevel.Fastest
}),
new GZipCompressorFactory(new GZipCompressionSettings
{
Level = CompressionLevel.Fastest
})
};
});
```
--------------------------------
### Add WebMarkupMin Services in Program.cs
Source: https://github.com/taritsyn/webmarkupmin/wiki/ASP.NET-Core-6
Configure WebMarkupMin services in the `Program.cs` file for ASP.NET Core 6+. This includes adding HTML, XML, and HTTP compression functionalities.
```csharp
using WebMarkupMin.AspNetCore6;
…
var builder = WebApplication.CreateBuilder(args);
#region Configure services
IServiceCollection services = builder.Services;
…
// Add WebMarkupMin services.
services.AddWebMarkupMin()
.AddHtmlMinification()
.AddXmlMinification()
.AddHttpCompression()
;
// Add framework services.
services.AddControllersWithViews();
…
#endregion
#region Configure the HTTP request pipeline
var app = builder.Build();
…
app.UseWebMarkupMin();
app.MapControllerRoute(
…
);
#endregion
app.Run();
```
--------------------------------
### Configure WebMarkupMin Services in ASP.NET Core
Source: https://github.com/taritsyn/webmarkupmin/wiki/ASP.NET-Core-3.1+
Add WebMarkupMin services to the dependency injection container in the `ConfigureServices` method. This includes HTML, XML, and HTTP compression functionalities.
```csharp
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using WebMarkupMin.AspNetCore3;
…
namespace WebMarkupMin.Sample.AspNetCore31.Mvc31
{
public class Startup
{
…
// This method gets called by the runtime.
// Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
…
// Add WebMarkupMin services.
services.AddWebMarkupMin()
.AddHtmlMinification()
.AddXmlMinification()
.AddHttpCompression()
;
// Add framework services.
services.AddControllersWithViews();
…
}
// This method gets called by the runtime.
// Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
…
app.UseWebMarkupMin();
app.UseEndpoints(endpoints =>
{
…
});
}
}
}
```
--------------------------------
### Configure WebMarkupMin Middleware in ASP.NET Core
Source: https://context7.com/taritsyn/webmarkupmin/llms.txt
Add WebMarkupMin services with configuration for HTML, XHTML, XML minification, and HTTP compression. Ensure to add the middleware before routing.
```csharp
using System.IO.Compression;
using WebMarkupMin.AspNet.Common.Compressors;
using WebMarkupMin.AspNet.Common.UrlMatchers;
using WebMarkupMin.AspNetCoreLatest;
using WebMarkupMin.Core;
using WebMarkupMin.NUglify;
var builder = WebApplication.CreateBuilder(args);
IServiceCollection services = builder.Services;
// Add WebMarkupMin services with configuration
services.AddWebMarkupMin(options =>
{
options.AllowMinificationInDevelopmentEnvironment = true;
options.AllowCompressionInDevelopmentEnvironment = true;
})
.AddHtmlMinification(options =>
{
// Exclude specific pages from minification
options.ExcludedPages = new List
{
new WildcardUrlMatcher("/api/*"),
new ExactUrlMatcher("/admin/debug"),
new RegexUrlMatcher(@"^/legacy/.*")
};
// Configure minification settings
HtmlMinificationSettings settings = options.MinificationSettings;
settings.RemoveRedundantAttributes = true;
settings.RemoveHttpProtocolFromAttributes = true;
settings.RemoveHttpsProtocolFromAttributes = true;
settings.WhitespaceMinificationMode = WhitespaceMinificationMode.Medium;
// Use NUglify for CSS and JS minification
options.CssMinifierFactory = new NUglifyCssMinifierFactory();
options.JsMinifierFactory = new NUglifyJsMinifierFactory();
})
.AddXhtmlMinification(options =>
{
// Include only specific pages for XHTML minification
options.IncludedPages = new List
{
new WildcardUrlMatcher("/xhtml/*"),
new ExactUrlMatcher("/contact")
};
XhtmlMinificationSettings settings = options.MinificationSettings;
settings.RemoveRedundantAttributes = true;
})
.AddXmlMinification(options =>
{
XmlMinificationSettings settings = options.MinificationSettings;
settings.CollapseTagsWithoutContent = true;
})
.AddHttpCompression(options =>
{
// Configure compression algorithms (in priority order)
options.CompressorFactories = new List
{
new BuiltInBrotliCompressorFactory(new BuiltInBrotliCompressionSettings
{
Level = CompressionLevel.Fastest
}),
new GZipCompressorFactory(new GZipCompressionSettings
{
Level = CompressionLevel.Fastest
}),
new DeflateCompressorFactory(new DeflateCompressionSettings
{
Level = CompressionLevel.Fastest
})
};
});
services.AddControllersWithViews();
var app = builder.Build();
// Add WebMarkupMin middleware (before routing)
app.UseWebMarkupMin();
app.MapControllerRoute(name: "default", pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();
```
--------------------------------
### HTML Minifier Configuration Options
Source: https://github.com/taritsyn/webmarkupmin/wiki/HTML-Minifier
This section details the various configuration options available for the WebMarkupMin HTML minifier.
```APIDOC
## HTML Minifier Configuration Options
### Description
This section details the various configuration options available for the WebMarkupMin HTML minifier, allowing for fine-grained control over the minification process.
### AttributeQuotesMode
#### Description
Determines the style for attribute quotes. Can auto-detect, use optimal style based on attribute value, or enforce single or double quotes.
#### Values
- `Auto`: Auto-detect style for attribute quotes based on the source input.
- `Optimal`: Optimal style for attribute quotes based on the attribute value.
- `Single`: Single quotes.
- `Double`: Double quotes.
### AttributeQuotesRemovalMode
#### Description
Specifies the mode for removing HTML attribute quotes. Options include keeping quotes, or removing them according to HTML 4.X or HTML5 standards.
#### Values
- `KeepQuotes`: Keep quotes.
- `Html4`: Removes quotes in accordance with standard HTML 4.X.
- `Html5`: Removes quotes in accordance with standard HTML5.
### RemoveEmptyAttributes
#### Description
A flag to determine whether to remove attributes with empty values. Specific attributes like `class`, `id`, `name`, `style`, `title`, `lang`, event attributes, `form[action]`, and `input[value]` are considered valid even when empty.
#### Type
Boolean
#### Default Value
`true`
### RemoveRedundantAttributes
#### Description
A flag to determine whether to remove redundant attributes that are often implied by the HTML standard or browser defaults. Examples include `a[name]`, `button[type=submit]`, `input[type=text]`, etc.
#### Type
Boolean
#### Default Value
`false`
### RemoveJsTypeAttributes
#### Description
A flag for whether to remove `type="text/javascript"` attributes from `script` tags.
#### Type
Boolean
#### Default Value
`true`
### RemoveCssTypeAttributes
#### Description
A flag for whether to remove `type="text/css"` attributes from `style` and `link` tags.
#### Type
Boolean
#### Default Value
`true`
### PreservableAttributeList
#### Description
A comma-separated list of attribute expressions that should not be removed during minification. These expressions are similar to CSS attribute selectors.
#### Examples
- `"form[method=get i]"`
- `"input[type]"`
- `"[xmlns]"`
#### Attribute Expression Varieties
- `[attrName]`
- `tagName[attrName]`
- `[attrName=attrValue]`
- `tagName[attrName=attrValue]`
- `[attrName=attrValue i]`
- `tagName[attrName=attrValue i]`
#### Type
String
#### Default Value
Empty string
### RemoveHttpProtocolFromAttributes
#### Description
A flag for whether to remove the `http:` protocol portion from URI-based attributes. Tags with `rel="external"` are skipped.
#### Type
Boolean
#### Default Value
`false`
### RemoveHttpsProtocolFromAttributes
#### Description
A flag for whether to remove the `https:` protocol portion from URI-based attributes. Tags with `rel="external"` are skipped.
#### Type
Boolean
#### Default Value
`false`
### RemoveJsProtocolFromAttributes
#### Description
A flag for whether to remove the JavaScript protocol portion from URI-based attributes.
#### Type
Boolean
#### Default Value
`true`
```
--------------------------------
### Override Default Logger for WebMarkupMin
Source: https://github.com/taritsyn/webmarkupmin/wiki/ASP.NET-Core-6
Demonstrates how to register a custom logger implementation to override the default logger used by WebMarkupMin.
```csharp
using WebMarkupMin.AspNetCore6;
using IWmmLogger = WebMarkupMin.Core.Loggers.ILogger;
using WmmAspNetCoreLogger = WebMarkupMin.AspNetCore6.AspNetCoreLogger;
// Override the default logger for WebMarkupMin.
services.AddSingleton();
// Add WebMarkupMin services to the services container.
services.AddWebMarkupMin(…)
```
--------------------------------
### WebMarkupMinOptions Configuration
Source: https://github.com/taritsyn/webmarkupmin/wiki/ASP.NET-Core-Extensions
Configuration of ASP.NET Core extensions are made through special classes like WebMarkupMinOptions. This class provides properties to control minification and compression behavior.
```APIDOC
## WebMarkupMin Options
`WebMarkupMinOptions` class provides properties to configure the behavior of WebMarkupMin in ASP.NET Core.
### Properties
- **AllowMinificationInDevelopmentEnvironment** (Boolean) - Optional - Flag for whether to allow markup minification if the current hosting environment name is `Development`.
- **AllowCompressionInDevelopmentEnvironment** (Boolean) - Optional - Flag for whether to allow HTTP compression of content if the current hosting environment name is `Development`.
- **DefaultEncoding** (Encoding) - Optional - Default encoding that will be used if the content encoding could not be determined for the current HTTP response.
### Default Values
- **AllowMinificationInDevelopmentEnvironment**: `false`
- **AllowCompressionInDevelopmentEnvironment**: `false`
- **DefaultEncoding**: `Encoding.Default`
```
--------------------------------
### Configure Kristensen CSS Minifier Settings
Source: https://github.com/taritsyn/webmarkupmin/wiki/Built-in-CSS-minifiers
Instantiate and configure KristensenCssMinificationSettings to control CSS minification behavior. Pass these settings to the KristensenCssMinifier constructor.
```csharp
var cssSettings = new KristensenCssMinificationSettings
{
RemoveRedundantSelectors = true,
RemoveUnitsFromZeroValues = true
})
var cssMinifier = new KristensenCssMinifier(cssSettings);
```
--------------------------------
### Register WebMarkupMin Middleware in ASP.NET Core 1.X
Source: https://github.com/taritsyn/webmarkupmin/wiki/ASP.NET-Core-1.X
In the Configure method of the Startup class, register the WebMarkupMin middleware using the UseWebMarkupMin extension method to process the HTTP request pipeline.
```csharp
app.UseWebMarkupMin();
```
--------------------------------
### Basic HTML Minification in C#
Source: https://github.com/taritsyn/webmarkupmin/wiki/HTML-Minifier
Use this snippet for basic HTML minification. It shows how to instantiate HtmlMinifier, minify HTML content, and display minification statistics or errors.
```csharp
using System;
using System.Collections.Generic;
using WebMarkupMin.Core;
namespace WebMarkupMin.Sample.ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
const string htmlInput = @"
The test document
Lorem ipsum dolor sit amet...
";
var htmlMinifier = new HtmlMinifier();
MarkupMinificationResult result = htmlMinifier.Minify(htmlInput,
generateStatistics: true);
if (result.Errors.Count == 0)
{
MinificationStatistics statistics = result.Statistics;
if (statistics != null)
{
Console.WriteLine("Original size: {0:N0} Bytes",
statistics.OriginalSize);
Console.WriteLine("Minified size: {0:N0} Bytes",
statistics.MinifiedSize);
Console.WriteLine("Saved: {0:N2}%",
statistics.SavedInPercent);
}
Console.WriteLine("Minified content:{0}{0}{1}",
Environment.NewLine, result.MinifiedContent);
}
else
{
IList errors = result.Errors;
Console.WriteLine("Found {0} error(s):", errors.Count);
Console.WriteLine();
foreach (var error in errors)
{
Console.WriteLine("Line {0}, Column {1}: {2}",
error.LineNumber, error.ColumnNumber, error.Message);
Console.WriteLine();
}
}
}
}
}
```
--------------------------------
### Configure HTTP Compression Factories
Source: https://github.com/taritsyn/webmarkupmin/wiki/ASP.NET-4.X-Extensions
Specifies the compressor factories to be used for HTTP compression, including Brotli, Deflate, and GZip.
```csharp
httpCompressionManager.CompressorFactories = new List
{
new BrotliCompressorFactory(),
new DeflateCompressorFactory(),
new GZipCompressorFactory()
};
```
--------------------------------
### Register Global Action Filters
Source: https://github.com/taritsyn/webmarkupmin/wiki/ASP.NET-4.X-MVC
To apply action filters at the application level, edit the `App_Start/FilterConfig.cs` file and register filters like CompressContentAttribute, MinifyHtmlAttribute, and MinifyXmlAttribute in the GlobalFilterCollection.
```csharp
using System.Web.Mvc;
using WebMarkupMin.AspNet4.Mvc;
namespace WebMarkupMin.Sample.AspNet4.Mvc4
{
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new CompressContentAttribute());
filters.Add(new MinifyHtmlAttribute());
filters.Add(new MinifyXmlAttribute());
}
}
}
```
--------------------------------
### Configure and Use Kristensen CSS Minifier
Source: https://context7.com/taritsyn/webmarkupmin/llms.txt
Configure CSS minification settings and use the KristensenCssMinifier directly or with the HtmlMinifier. Ensure correct settings for properties like RemoveUnitsFromZeroValues.
```csharp
using WebMarkupMin.Core;
// Configure CSS minification settings
var cssSettings = new KristensenCssMinificationSettings
{
RemoveRedundantSelectors = true, // a#btn -> #btn
RemoveTrailingSemicolons = true, // { color: red; } -> { color: red }
RemoveUnitsFromZeroValues = false // 0px -> 0 (disable if using calc/clamp)
};
var cssMinifier = new KristensenCssMinifier(cssSettings);
// Use with HTML minifier
var htmlSettings = new HtmlMinificationSettings
{
MinifyEmbeddedCssCode = true,
MinifyInlineCssCode = true
};
var htmlMinifier = new HtmlMinifier(htmlSettings, cssMinifier, jsMinifier: null, logger: null);
// CSS minifier can also be used directly
string cssCode = @"
body {
margin: 0px;
padding: 0px;
}
a#resetButton {
color: red;
}
";
CodeMinificationResult cssResult = cssMinifier.Minify(cssCode, isInlineCode: false);
Console.WriteLine(cssResult.MinifiedContent);
// Output: body{margin:0;padding:0}#resetButton{color:red}
```
--------------------------------
### Configure XML Minification Settings
Source: https://github.com/taritsyn/webmarkupmin/wiki/ASP.NET-4.X-Extensions
Enables collapsing tags that do not contain content during XML minification.
```csharp
xmlMinificationSettings.CollapseTagsWithoutContent = true;
```
--------------------------------
### Advanced HTML Minification with Custom Settings in C#
Source: https://github.com/taritsyn/webmarkupmin/wiki/HTML-Minifier
This snippet demonstrates advanced HTML minification using custom settings, including CSS and JavaScript minifiers, and a logger. It's useful when you need fine-grained control over the minification process.
```csharp
using System;
using System.Collections.Generic;
using System.Text;
using WebMarkupMin.Core;
using WebMarkupMin.Core.Loggers;
namespace WebMarkupMin.Sample.ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
const string htmlInput = @"
The test document
Lorem ipsum dolor sit amet...
";
var settings = new HtmlMinificationSettings();
var cssMinifier = new KristensenCssMinifier();
var jsMinifier = new CrockfordJsMinifier();
var logger = new NullLogger();
var htmlMinifier = new HtmlMinifier(settings, cssMinifier,
jsMinifier, logger);
MarkupMinificationResult result = htmlMinifier.Minify(htmlInput,
fileContext: string.Empty,
encoding: Encoding.GetEncoding(0),
```
--------------------------------
### Register HTTP Modules in Web.config (IIS Classic Mode)
Source: https://github.com/taritsyn/webmarkupmin/wiki/ASP.NET-4.X-HTTP-modules
Register the HTML, XHTML, XML minification, and HTTP compression modules within the `` section for IIS Classic mode.
```xml
…
…
…
```
--------------------------------
### HttpCompressionManager and HttpCompressionOptions Properties
Source: https://github.com/taritsyn/webmarkupmin/wiki/ASP.NET-Extensions
Configuration properties for HTTP compression management.
```APIDOC
## HttpCompressionManager and HttpCompressionOptions
### Description
These classes manage HTTP compression settings and options for text content. They determine which compression algorithms to use, which HTTP status codes and methods are supported, and how to filter content for compression.
### Properties
#### CompressorFactories
- **Data type**: `IList`
- **Default value**: Instance of `GZipCompressorFactory`, Instance of `DeflateCompressorFactory`
- **Description**: List of HTTP compressor factories. The order determines the priority of compression algorithms. Custom compressors can be added by implementing `ICompressor` and `ICompressorFactory` interfaces and adding the factory to the top of this list.
#### SupportedHttpStatusCodes
- **Data type**: `ISet`
- **Default value**: `200`
- **Description**: List of HTTP status codes for which compression is supported.
#### SupportedHttpMethods
- **Data type**: `ISet`
- **Default value**: `GET`
- **Description**: List of HTTP methods for which compression is supported.
#### SupportedMediaTypePredicate
- **Data type**: `Func`
- **Default value**: `null`
- **Description**: A delegate that determines if a media-type is supported for compression. If `null`, the `MediaTypeHelpers.IsTextBasedMediaType` method is used.
#### IncludedPages
- **Data type**: `IList`
- **Default value**: Empty list
- **Description**: List of URL matchers used to include pages for compression processing.
#### ExcludedPages
- **Data type**: `IList`
- **Default value**: Empty list
- **Description**: List of URL matchers used to exclude pages from compression processing.
### Usage Notes
- The `HttpCompressionManager` decides between GZip and Deflate based on the `Accept-Encoding` HTTP header. If both are supported, the algorithm higher in the `CompressorFactories` list takes precedence.
- Support for other compression algorithms (e.g., Brotli) can be added by creating custom `ICompressor` and `ICompressorFactory` implementations.
```
--------------------------------
### Configure and Use Crockford JavaScript Minifier
Source: https://context7.com/taritsyn/webmarkupmin/llms.txt
Instantiate the CrockfordJsMinifier and use it directly or integrate it with the HtmlMinifier. Configure HTML minification settings to enable embedded and inline JavaScript minification.
```csharp
using WebMarkupMin.Core;
var jsMinifier = new CrockfordJsMinifier();
// Use with HTML minifier
var htmlSettings = new HtmlMinificationSettings
{
MinifyEmbeddedJsCode = true,
MinifyInlineJsCode = true,
MinifyEmbeddedJsonData = true // Minifies JSON in script[type="application/json"]
};
var htmlMinifier = new HtmlMinifier(htmlSettings, cssMinifier: null, jsMinifier, logger: null);
// JS minifier can also be used directly
string jsCode = @"
function greet(name) {
// This is a comment
var message = 'Hello, ' + name + '!';
console.log(message);
return message;
}
";
CodeMinificationResult jsResult = jsMinifier.Minify(jsCode, isInlineCode: false);
Console.WriteLine(jsResult.MinifiedContent);
```
--------------------------------
### Configure XHTML Minifier Factories
Source: https://github.com/taritsyn/webmarkupmin/wiki/ASP.NET-4.X-Extensions
Sets the factories for CSS and JavaScript minification specifically for XHTML.
```csharp
xhtmlMinificationManager.CssMinifierFactory =
new YuiCssMinifierFactory();
xhtmlMinificationManager.JsMinifierFactory =
new YuiJsMinifierFactory();
```
--------------------------------
### Configuring HTML Minification Settings in C#
Source: https://context7.com/taritsyn/webmarkupmin/llms.txt
Illustrates how to configure HTML minification behavior using HtmlMinificationSettings. This includes options for whitespace handling, comment removal, tag and attribute optimization, and embedded code minification.
```csharp
using WebMarkupMin.Core;
var settings = new HtmlMinificationSettings
{
// Whitespace handling: None, Safe, Medium (default), or Aggressive
WhitespaceMinificationMode = WhitespaceMinificationMode.Medium,
PreserveNewLines = false,
// Comment removal
RemoveHtmlComments = true,
RemoveHtmlCommentsFromScriptsAndStyles = true,
// DOCTYPE optimization
UseShortDoctype = true, // Converts to
CustomShortDoctype = "", // Or specify custom: ""
// Character encoding
UseMetaCharsetTag = true, // Converts to
// Tag optimization
RemoveOptionalEndTags = true, // Removes ,
, , etc.
RemoveTagsWithoutContent = false,
EmptyTagRenderMode = HtmlEmptyTagRenderMode.NoSlash, // vs vs
PreserveCase = false, // Set true for Angular 2 templates
// Attribute optimization
CollapseBooleanAttributes = true, // checked="checked" -> checked
AttributeQuotesRemovalMode = HtmlAttributeQuotesRemovalMode.Html5,
RemoveEmptyAttributes = true,
RemoveRedundantAttributes = false,
RemoveJsTypeAttributes = true, // Removes type="text/javascript"
RemoveCssTypeAttributes = true, // Removes type="text/css"
// Protocol removal
RemoveHttpProtocolFromAttributes = true,
RemoveHttpsProtocolFromAttributes = true,
RemoveJsProtocolFromAttributes = true,
// Embedded code minification
MinifyEmbeddedCssCode = true,
MinifyInlineCssCode = true,
MinifyEmbeddedJsCode = true,
MinifyInlineJsCode = true,
MinifyEmbeddedJsonData = true,
// Framework-specific optimizations
MinifyKnockoutBindingExpressions = false,
MinifyAngularBindingExpressions = false,
ProcessableScriptTypeList = "text/html, text/ng-template"
};
var htmlMinifier = new HtmlMinifier(settings);
```
--------------------------------
### WebMarkupMin Common Configuration Properties
Source: https://github.com/taritsyn/webmarkupmin/wiki/ASP.NET-Extensions
Details the common configuration properties available in WebMarkupMinConfigurationBase, which is inherited by both ASP.NET 4.X and ASP.NET Core 1.X configuration classes.
```APIDOC
## WebMarkupMin Common Configuration
### Description
Configuration properties common to WebMarkupMin extensions for ASP.NET 4.X and ASP.NET Core 1.X, inherited from `WebMarkupMinConfigurationBase`.
### Properties
#### DisableMinification (Boolean)
- **Default value**: `false`
- **Description**: Flag for whether to disable markup minification.
#### DisableCompression (Boolean)
- **Default value**: `false`
- **Description**: Flag for whether to disable HTTP compression of content.
#### MaxResponseSize (Int32)
- **Default value**: `-1`
- **Description**: Maximum size of the response (in bytes), in excess of which disables the minification of markup. If this property is set equal to `-1`, then checking of the response size is not performed.
#### DisablePoweredByHttpHeaders (Boolean)
- **Default value**: `false`
- **Description**: Flag for whether to disable the `*-Minification-Powered-By` HTTP headers (e.g. `X-HTML-Minification-Powered-By: WebMarkupMin`).
```