7

次のように、ページの 1 つで出力キャッシュを有効にしました。

<%@ OutputCache Duration="300" VaryByParam="*"%>

問題は、場合によっては例外が発生し、適切なメッセージが表示されることです。ただし、このページはキャッシュされ、他のユーザーにも例外メッセージが表示されます。たとえば、データベースがタイムアウトになり、SQL 例外がスローされたとします。この例外がキャッチされ、「データベースへの接続中にエラーが発生しました。しばらくしてから試してください」というメッセージが表示されます。現在、このメッセージはキャッシュされ、データベースにクエリを実行することなく他のユーザーに表示されます。

したがって、例外が発生した場合は特定の出力キャッシュを無効にするか、例外が発生した場合はキャッシュしないようにする必要があります。これはどのように行うことができますか?

これは、ASP.NET 3.5 Web フォーム用です。

4

2 に答える 2

5

キャッシュアイテムを削除できるはずです

HttpResponse.RemoveOutputCacheItem("/MyPage/MyParameter");
于 2012-05-14T14:27:41.210 に答える
3

Application_Error例外がGlobal.asax に到着すると仮定すると、次のことを試すことができます。

public void Application_Error(Object sender, EventArgs e) {
    ...

    Response.Cache.AddValidationCallback(
        DontCacheCurrentResponse, 
        null);

    ...
}

private void DontCacheCurrentResponse(
    HttpContext context, 
    Object data, 
    ref HttpValidationStatus status) {

    status = HttpValidationStatus.IgnoreThisRequest;
}

これにより、次の応答がキャッシュから提供されるのではなく、実際にページ/コントローラーに到達することが保証されます。

于 2013-01-23T20:56:10.507 に答える