2016-05-06 12 views

答えて

0

は、ミドルウェアを使用すると、突然、私の心に来ていると私は以下のようなクラスを実装している:

public class OutputCacheHeaderMiddleware 
    { 
     private readonly RequestDelegate _next; 

     public OutputCacheHeaderMiddleware(RequestDelegate next) 
     { 
      _next = next; 
     } 

     public async Task Invoke(HttpContext context) 
     { 
      var user = UserHelper.GetUser(context); 

      if (user?.UserInfos != null) 
      { 
       var key = "user_1_a_" + string.Join(",", user.UserInfos.Select(u => u.Id)); 
       context.Request.Headers.Add("dt-cache-user", key); 
      } 


      await _next.Invoke(context); 

     } 
    } 

してから、そのための拡張メソッドがあります:

public static class OutputCacheHeaderExtensions 
    { 
     public static IApplicationBuilder UseOutputCacheHeader(this IApplicationBuilder builder) 
     { 
      return builder.UseMiddleware<OutputCacheHeaderMiddleware>(); 
     } 
    } 

とStartup.cs設定方法において、iがapp.UseOutputCacheHeader();

を添加

とコントローラ上の:このすべての後

[ResponseCache(VaryByHeader = "dt-cache-user", Duration = 6000)] 
public IActionResult Index() 
{ 
    return View(); 
} 

、私はそれをデバッグするとき、私は適切な値を持つヘッダ「DT-キャッシュ・ユーザー」があることがわかりますが、のResponseCacheではありませんワーキング。 F5を押してページを更新するたびに、常にデバッグポイントに当たっていました。

これはうまくいかない理由は何ですか?

ありがとうございました。

+0

応答キャッシュのキャッシュは、ブラウザによって異なります。たとえば、Google Chromeでは、手動でページを更新するか、キャッシュを無効にするようにdevツールが設定されている場合は、常にリクエストが送信されます。索引ページに一度移動した後、その索引ページへのリンクをクリックしてみてください。 –

+0

私は特に "Disable Cahce"チェックボックスをコントロールしましたが、チェックが外されました。リフレッシュアクションとナビゲートアクションの両方が機能しませんでした。 –

関連する問題