4
我使用以下屬性來裝飾我的BaseController
類。在ASP.NET MVC中壓縮內容文件3
public class OutputCompressAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
string encodingsAccepted = filterContext.HttpContext.Request.Headers["Accept-Encoding"];
if (string.IsNullOrEmpty(encodingsAccepted))
return;
encodingsAccepted = encodingsAccepted.ToLowerInvariant();
HttpResponseBase response = filterContext.HttpContext.Response;
if (encodingsAccepted.Contains("gzip"))
{
response.AppendHeader("Content-encoding", "gzip");
response.Filter = new GZipStream(response.Filter, CompressionMode.Compress);
}
else if (encodingsAccepted.Contains("deflate"))
{
response.AppendHeader("Content-encoding", "deflate");
response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress);
}
}
}
的問題是,儘管這只是正常的意見和每一個動作的結果,屬性不工作的東西,對項目的/Content
文件夾。我想知道我該怎麼做才能使Content
文件夾中的文件使用控制器,或者以某種方式綁定某些東西,或者讓我將這些過濾器附加到響應頭中。
但是你不能在web.config中設置它,對吧?你將如何在共享主機環境中設置壓縮? – frennky 2012-02-11 10:44:30
@frennky,在這種情況下,您應該使用自定義HTTP模塊(IHttpModule)而不是操作篩選器。動作過濾器(如其名稱所暗示的)用於動作。如果您想手動壓縮靜態文件,請使用模塊。但爲了讓這個模塊被調用靜態資源,如圖像和JavaScript,你需要配置你的應用程序在集成管道模式下運行。 – 2012-02-11 12:04:31
@Darin是否有用於GZip響應的HTTP模塊的示例? – bevacqua 2012-02-17 16:35:07