2015-09-08 5 views
0

Как я могу кэшировать пользовательскую страницу с использованием outputcache?Как кэшировать пользовательскую страницу с помощью outputcache

настроить страницу ошибки:

<httpErrors errorMode="Custom" existingResponse="Replace"> 
    <remove statusCode="404" subStatusCode="-1" /> 
    <error statusCode="404" path="/customerror/notfound" responseMode="ExecuteURL" /> 
    <remove statusCode="500" subStatusCode="-1" /> 
    <error statusCode="500" path="/customerror/servererror" responseMode="ExecuteURL" /> 
</httpErrors> 

customerrorcontroller:

public class CustomErrorController 
{ 

    [OutputCache(Duration = duration, Location = OutputCacheLocation.Server, VaryByHeader = "Host", VaryByParam = "None")] 
    public ActionResult NotFound() 
    { 
     return this.View("NotFound", this.Build()); 
    } 

    private TestModel Build() 
    { 
     var model = new TestModel 
         { 
          Header = GetSiteHeaderContent(SiteId), 
          Footer = GetSiteFooterContent(SiteId), 
          Navigations = GetNavigations(), 
          SecondaryNavigations = GetSecondaryNavigation() 
         }; 
     return model; 
    } 
} 

проблема заключается в том, что действие никогда не кэшируются, хотя я использую кэш вывода во многих местах и ​​работает отлично.

Примечание: Я использую Memcached.

Заранее спасибо.

ответ

1

Возможный способ может быть, чтобы перенаправить на другое действие и кэшировать его, как

public ActionResult Index() 
{ 
    return RedirectToAction("NotFound"); 
} 

[OutputCache] 
public ActionResult NotFound() 
{ 
    return this.View("NotFound", this.Build()); 
} 

private TestModel Build() 
{ 
    var model = new TestModel 
        { 
         Header = GetSiteHeaderContent(SiteId), 
         Footer = GetSiteFooterContent(SiteId), 
         Navigations = GetNavigations(), 
         SecondaryNavigations = GetSecondaryNavigation() 
        }; 
    return model; 
} 
+0

, но если вы используете RedirectToAction то Response.StatusCode меняется от 404. И это не очень хорошая практика. Вы возвращаете недействительный код состояния для URL-адреса, который должен вернуть ошибку 404. – Meysam

Смежные вопросы