3

C# Mvc アプリケーションでイメージのサイズを変更して配信するために、 ImageResizingライブラリを使用しています。

起こっていないことの 1 つは、私のイメージがキャッシュされていないことです。

各画像にキャッシュを適切に追加するために何が必要かを理解するのに苦労しています。

書き込みトラックにいるかどうかを知る必要がありますか? これで画像が正しくキャッシュされますか?

私がする必要があるのは、FinalContentType と FinalContentType を ImageResizer_OnPostAuthorizeRequestStart に設定することだと思います (これらの値を取得する場所がわかりません)

そして、Application_PreSendRequestHeaders で、以下のコードを使用してキャッシュ ヘッダーを正しく設定できることを願っています。

ここで説明した方法の修正版を使用しました。

これが私のコードです:

 private static void ImageResizer_OnPostAuthorizeRequestStart(IHttpModule sender2, HttpContext context)
        {
            string path = Config.Current.Pipeline.PreRewritePath;
            if (!path.StartsWith(PathUtils.ResolveAppRelative("~/s3"), StringComparison.OrdinalIgnoreCase)) return;
        Config.Current.Pipeline.SkipFileTypeCheck = true;
        Config.Current.Pipeline.ModifiedQueryString["cache"] = ServerCacheMode.Always.ToString();
    }

    protected void Application_PreSendRequestHeaders(Object source, EventArgs e)
    {
        var app = source as HttpApplication;

        HttpContext context = (app != null) ? app.Context : null;

        if (context != null && context.Items != null && context.Items["FinalContentType"] != null && context.Items["LastModifiedDate"] != null)
        {
            //Clear previous output 
            //context.Response.Clear(); 
            context.Response.ContentType = context.Items["FinalContentType"].ToString();

            //FinalContentType is set to image/jpeg or whatever the image mime-type is earlier in code. 
            //Add caching headers 
            int mins = 1; //Or Configuration.AppSettings['whatever'] 

            if (mins > 0)
            {
                context.Response.Expires = 1;
            }

            var lastModified = (DateTime?)context.Items["LastModifiedDate"]; //Set earlier in code. 

            if (lastModified != DateTime.MinValue)
            {
                Response.Cache.SetLastModified(lastModified.Value);
            }

            Response.Cache.SetCacheability(context.Request.IsAuthenticated ? HttpCacheability.Private : HttpCacheability.Public);
        }

    }
4

1 に答える 1

4

DiskCache プラグインと ClientCache プラグインを使用して、それぞれディスク キャッシングとキャッシュ ヘッダーを処理します。

ここでは、ASP.NET の出力キャッシュは役に立ちません。

于 2012-12-20T05:18:35.520 に答える