3

ASP.NET MVCで非同期コントローラーアクションを実装するときに、キャッシュを出力する場合ActionResult、どのメソッドにOutputCache属性を設定しますか?

public class PortalController : AsyncController {
    /// HERE...?
    [OutputCache(Duration = 60 * 30 /* 30min */, VaryByParam = "city")]
    public void NewsAsync(string city) {

        AsyncManager.OutstandingOperations.Increment();
        NewsService newsService = new NewsService();
        newsService.GetHeadlinesCompleted += (sender, e) =>
        {
            AsyncManager.Parameters["headlines"] = e.Value;
            AsyncManager.OutstandingOperations.Decrement();
        };
        newsService.GetHeadlinesAsync(city);
    }

    /// ...OR HERE?
    [OutputCache(Duration = 60 * 30 /* 30min */, VaryByParam = "city")]
    public ActionResult NewsCompleted(string[] headlines) {
        return View("News", new ViewStringModel
        {
            NewsHeadlines = headlines
        });
    }
}

最初は、それが続くと思いましたNewsCompleted。なぜなら、それが。を返すメソッドだからですActionResult

NewsAsync次に、それがに関連付けられていることに気付きましたVaryByParam。そのため、そのメソッドに属性を設定する方がおそらく理にかなっています。

4

1 に答える 1

6

OutputCacheパラメータは、void NewsAsyncメソッドではなくメソッドに適用されActionResult NewsCompletedます。(実験により決定)

于 2011-02-04T02:53:19.673 に答える