2017-02-17 16 views
1

出力キャッシュが正常に動作していないようです これは私のウェブサイトのデフォルトページを返すコントローラメソッドです。 私は40secsのためにそれをキャッシュしている - 私は最初のエンドポイントを打つとき、私は2つの問題OutputCacheが正しく動作しません - > ASP.NET MVC5

まず

を持って

[OutputCache(Duration = 40, Location = OutputCacheLocation.ServerAndClient, VaryByParam = "none")] 
public async Task<ActionResult> Index(){ 
...... 
} 

(テスト>ライブでそれがはるかに長いためにキャッシュされています)サーバー上で正しくキャッシュされ、(期待どおり)次の応答ヘッダーが返されます。

status:200 
Cache-Control:"private, max-age=40, s-maxage=0" 

新しいブラウザタブを開いて、5秒後に同じエンドポイントに貼り付けるとき。サーバーに移動し、内容と次のヘッダーを含む200を返します

status:200 
Cache-Control:"private, max-age=63622944145, s-maxage=63622944105" 

これは私にとっては正しいとは限りません。私はIf-modified-sinceヘッダーを使ってサーバーに要求を送信することを期待していました。キャッシュされた応答がヘッダーの時間以降に再構築された場合、それは200 +コンテンツelse 304を返します。この場合、サーバーキャッシュは再構築されないため、304を返す必要があります。また、それは現在無効であるため、ただちに無効とみなされます。 私は何を間違っているのですか?

第二

私は私のIndexメソッドにブレークポイントを入れて、私のブラウザーからエンドポイントをヒット。インデックスエンドポイントに初めて当たったとき、ブレークポイントがヒットしました。その後のエンドポイントへの要求は、期待どおりに次の40秒間ブレークポイントにヒットしません。しかし、ブラウザのエンドポイントの最後に "/"を追加すると、キャッシュを無視してブレークポイントに到達します。 どうすればこの問題を回避できますか?

+0

あなたの質問、URL 'http://www.example.com' と 'http://www.example.com/' の第2の半分について/は、別のページです。両方を同じように扱うには、Web.ConfigにURL書き換えモジュールが必要です。私は下の私の答えを変更します。 – kodikas

答えて

0

私はちょうど同じ問題を抱えていました。ここではgithubの上のスレッド(私はそれがバグをだと思うが)あります: https://github.com/Microsoft/dotnet/issues/330

次のように私のためのソリューションだった: は、(1)の.Net Frameworkの4.6.2のDevパックをダウンロードし、インストールします。あなたのプロジェクトのプロパティページに移動し、それをリストから選択するか、他のフレームワークをインストール... (2)あなたのアプリを4.6.2に向けてください。プロジェクトを再起動する必要があります(メッセージがあります)。 は(3)web.configファイルに移動して、これらの値が設定されていることを確認:

<system.web> 
<compilation targetFramework="4.6.2" /> 
<httpRuntime targetFramework="4.6.2" /> 

(4)最後に、NuGetパッケージインストーラに移動し、(それを検索)以下のパッケージをインストールします。Microsoft .AspNet.OutputCache.OutputCacheModuleAsync

問題は修正されました。私はこれが役立つことを願っています

質問2:削除末尾のスラッシュ

ウェブでこのコードを追加します。適切なセクションの設定:

<system.webServer> 
<rewrite> 
    <rules> 
    <rule name="Remove trailing slash" enabled="true" stopProcessing="true"> 
     <match url="(.*)/$" /> 
     <conditions> 
     <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
     <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
     </conditions> 
     <action type="Redirect" redirectType="Permanent" url="{R:1}" /> 
    </rule> 
    </rules> 
</rewrite> 
<validation validateIntegratedModeConfiguration="false" /> 

関連する問題