asp.net-mvc - MVC 在呈现给用户之前更改响应的最后机会

标签 asp.net-mvc response

在呈现给用户之前,我需要更改完整的 html 响应流(使用 html 解析)。 在哪里/什么时候是最后一次这样做的机会?

最佳答案

恕我直言,在 ASP.NET MVC 环境中更改 HTML 响应的更好方法是使用操作过滤器。 这是用于压缩输出的操作过滤器的示例:

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);
        }
    }
}

您可以在您的操作方法中像这样使用它:

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

HTH

关于asp.net-mvc - MVC 在呈现给用户之前更改响应的最后机会,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2176095/

相关文章:

asp.net-mvc - 使用 MVCContrib 网格进行编辑

c# - 在asp.net mvc中仅刷新页面导航中母版页中的内容面板

symfony - 在 symfony2 中向 header 添加额外的新参数作为响应

javascript - 通过检查响应来处理 Promise 中的错误

c# - 将列表转换为 IEnumerable<SelectListItem>

javascript - MVC Asp.Net Controller 将原始 JSON 返回到新窗口

c# - 将模型传递给 View 时可以向下转换吗?

request - OData 请求/响应的 _metadata 节点中属性 id 和 uri 之间的区别?

arrays - 如何从soapUI响应中提取字节数组?

c# - 在 C# 中从 WebClient 读取响应 header