在使用Html.Action的异常,当控制器装饰有输出缓存attribure(exception o

2019-10-29 20:24发布

当我打电话异常被抛出Html.Action从视图当控制器装饰用OutputCache属性。 但是,当我从控制器一切删除属性按预期工作。

我不想删除的OutputCache属性,我不知道该如何属性负责抛出异常。 我该如何解决这个问题?

控制器:

[OutputCache(Location = OutputCacheLocation.None, NoStore = true)]
public class TestController : Controller
{
    public PartialViewResult Test()
    {
        Debug.WriteLine("test");
        return PartialView();
    }
}

视图:

<div>
    <!-- Tab 1 -->
    @Html.Action("Test")
</div>

例外:

{"Error executing child request for handler 'System.Web.Mvc.HttpHandlerUtil+ServerExecuteHttpHandlerAsyncWrapper'."}

的InnerException

{"Child actions are not allowed to perform redirect actions."}

更新我只得到了异常,当我尝试禁用输出缓存。 通过添加上述属性或持续时间设置为0。

Answer 1:

还有其他的方法来禁用缓存过,去Global.asax.cs文件,并添加以下代码,

protected void Application_BeginRequest()
        {
            Response.Cache.SetCacheability(HttpCacheability.NoCache);
            Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1));
            Response.Cache.SetNoStore();
        }

现在你不需要添加[OutputCache]现在的属性。 让我知道它的工作! 干杯



Answer 2:

因为没有指定Duration属性是输出缓存属性生成一个隐藏例外。 然而,持续时间不能为0,这样做出的属性的OutputCache不是非常有用的我。 我决定创建自己的noCache属性采取工作的关心。 (参见下面的代码)

使用这个属性,而不是OutputCacheAttribute解决我的问题。

using System;
using System.Web;
using System.Web.Mvc;

namespace Cormel.QIC.WebClient.Infrastructure
{
    public class NoCacheAttribute : ActionFilterAttribute
    {
        public override void OnResultExecuting(ResultExecutingContext filterContext)
        {
            filterContext.HttpContext.Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1));
            filterContext.HttpContext.Response.Cache.SetValidUntilExpires(false);
            filterContext.HttpContext.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
            filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
            filterContext.HttpContext.Response.Cache.SetNoStore();

            base.OnResultExecuting(filterContext);
        }
    }
}


文章来源: exception on use of Html.Action when controller is decorated with outputcache attribure