Это связано с тем, как работает OutputCacheAttribute
, в частности с его зависимостью от RouteData
, не равной нулю.Соответствующая часть:
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
if (filterContext == null)
{
throw new ArgumentNullException("filterContext");
}
if (!filterContext.IsChildAction)
{
new OutputCachedPage(this._cacheSettings).ProcessRequest(HttpContext.Current);
}
}
ResultExecutingContext filterContext
происходит от ControllerContext
.Это источник для ControllerContext.IsChildAction
:
public virtual bool IsChildAction
{
get
{
RouteData routeData = this.RouteData;
if (routeData == null)
{
return false;
}
return routeData.DataTokens.ContainsKey("ParentActionViewContext");
}
}
Итак, почему это относится к вашему вопросу?
Потому что, когда вы опускаете "/", ваш Route
ничего не соответствует.Маршрут по умолчанию "/
".Статья, которая объясняет это более подробно, находится здесь: http://www.58bits.com/blog/2008/09/29/ASPNet-MVC-And-Routing-Defaultaspx.aspx.Он был написан, чтобы объяснить, почему файл Default.aspx
был необходим в проектах ASP.NET MVC 1, но причина кроется в том же месте.
Итак, в основном, RouteData имеет значение null, поэтому OutputCacheAttribute
не может работать.Вы можете решить свою проблему, выполнив то, что предложил Майкл Джаспер, и воспользовавшись перезаписью URL.