2013-04-27 2 views
1

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

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

Однако,

для управления различного кэширования сценария х, за the MSDN documentation можно кэшировать (например) наш метод 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» не определен 210 , видимо, я что-то, как я постоянно бросаете следующее исключение отсутствует. Пожалуйста, определите его в файле конфигурации.

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

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 

ответ

6

я обнаружил, что я поместил код конфигурации в «Вид» в Web.config вместо корневой Web.config. После того, как я поставил:

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

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