ASP.NET MVC4 — исключение OutputCache

Я могу надлежащим образом использовать ASP.NET MVC4 OutputCache со следующим кодом в качестве атрибута в моем контроллере Index():

[OutputCache(Duration = 600, VaryByParam = "none")]

Тем не мение,

Чтобы управлять различными сценариями кэширования, следуйте документации MSDN мы можем кэшировать (например) метод Index() наших контроллеров, используя OutputCache. Следуя документации, мы получаем следующий код:

в нашем контроллере

    //[OutputCache(Duration = 600, VaryByParam = "none")] //works without any modification to the Web.config
    [OutputCache(CacheProfile = "Cache1Hour", VaryByParam = "none")]
    public ActionResult Index()
    {
        return View();
    }

и в нашем Web.config

  <system.web>
    <caching>
      <outputCacheSettings>
          <outputCacheProfiles>
              <add name="Cache1Hour" duration="3600"/>
          </outputCacheProfiles>
      </outputCacheSettings>
    </caching>
            ...
            ...
            ...
  </system.web>

Вопрос/проблема: очевидно, я что-то упускаю, поскольку постоянно выбрасываю следующее исключение:

Сведения об исключении: System.Web.HttpException: профиль кэша «Cache1Hour» не определен. Пожалуйста, укажите это в файле конфигурации.

полное исключение:

Server Error in '/' Application.
The 'Cache1Hour' cache profile is not defined.  Please define it in the configuration file.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Web.HttpException: The 'Cache1Hour' cache profile is not defined.  Please define it in the configuration file.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:


[HttpException (0x80004005): The 'Cache1Hour' cache profile is not defined.  Please define it in the configuration file.]
   System.Web.UI.Page.InitOutputCache(OutputCacheParameters cacheSettings) +3136900
   System.Web.Mvc.OutputCachedPage.FrameworkInitialize() +47
   System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +48
   System.Web.UI.Page.ProcessRequest() +72
   System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext context) +21
   System.Web.UI.Page.ProcessRequest(HttpContext context) +58
   System.Web.Mvc.OutputCacheAttribute.OnResultExecuting(ResultExecutingContext filterContext) +184
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation) +72
   System.Web.Mvc.<>c__DisplayClass1c.<InvokeActionResultWithFilters>b__19() +72
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation) +388
   System.Web.Mvc.<>c__DisplayClass1c.<InvokeActionResultWithFilters>b__19() +72
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) +303
   System.Web.Mvc.Async.<>c__DisplayClass2a.<BeginInvokeAction>b__20() +155
   System.Web.Mvc.Async.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult) +184
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +136
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +56
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +40
   System.Web.Mvc.<>c__DisplayClass1d.<BeginExecuteCore>b__18(IAsyncResult asyncResult) +40
   System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +47
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +151
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +59
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +40
   System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +44
   System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +47
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +151
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +59
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +40
   System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +39
   System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +39
   System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__3(IAsyncResult asyncResult) +45
   System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +47
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +151
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +59
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +40
   System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +40
   System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +38
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9629296
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155

person id.ot    schedule 27.04.2013    source источник


Ответы (1)


Я обнаружил, что поместил код конфигурации в Web.config View вместо корневого Web.config. Однажды я разместил:

<system.web>
    <caching>
      <outputCacheSettings>
          <outputCacheProfiles>
              <add name="Cache1Hour" duration="3600"/>
          </outputCacheProfiles>
      </outputCacheSettings>
    </caching>
    ...
    ...
    ...
</system.web>   

... в правильный Web.config метод был правильно кэширован, я надеюсь, что это поможет кому-то еще. По крайней мере, код и стратегия, которые я показал здесь, в этом посте, дают вам минимальные требования для кэширования метода в вашем контроллере с использованием OutputCache.

person id.ot    schedule 27.04.2013