views:

46

answers:

2

I need to change full html response stream (with html parsing) before it is rendered to user. Where/When is the last chance to do that?

A: 

IMHO, a better way to alter HTML response in ASP.NET MVC environment is to use action filters. This is an example of an action filter for compressing the output:

public class CompressFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        HttpRequestBase request = filterContext.HttpContext.Request;

        string acceptEncoding = request.Headers["Accept-Encoding"];

        if (string.IsNullOrEmpty(acceptEncoding)) return;

        acceptEncoding = acceptEncoding.ToUpperInvariant();

        HttpResponseBase response = filterContext.HttpContext.Response;

        if (acceptEncoding.Contains("GZIP"))
        {
            response.AppendHeader("Content-encoding", "gzip");
            response.Filter = new GZipStream(response.Filter, CompressionMode.Compress);
        }
        else if (acceptEncoding.Contains("DEFLATE"))
        {
            response.AppendHeader("Content-encoding", "deflate");
            response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress);
        }
    }
}

You can use it like this on your action methods:

    [CompressFilter]
    // Minifies, compresses JavaScript files and stores the response in client (browser) cache for a day
    public JavaScriptResult GetJavaScript(string jsPath)

HTH

mare