在什么情况下IIS使用304响应代码进行响应

时间:2013-07-24 09:41:03

标签: asp.net .net asp.net-mvc iis

我正在使用ASP.NET MVC(3)应用程序。它是一个订购系统。当我在“选择产品”页面中添加产品时,它将重定向到“查看并应用”页面以查看购物车。

假设我在“选择产品”页面中添加产品“A”并移至“查看并应用”并返回“选择产品页面”并重新启动产品并添加产品“B”。当我转到Review and Apply页面时,我只看到产品A.当我使用IE的网络选项卡检查时,它表示服务器响应状态代码304,因此客户端使用缓存页面。

如何解决此问题,以便服务器向我发送新页面而不是304。

感谢。

1 个答案:

答案 0 :(得分:1)

向控制器或操作添加输出缓存属性。我建议您在web.config中使用缓存配置文件来实现此目的。

[OutputCache(CacheProfile = "NoCache")]
public class MyController : Controller
{

}

这将放在system.web元素下的web.config中。

<caching>
  <outputCacheSettings>
    <outputCacheProfiles>
      <clear />
      <add name="NoCache" varyByParam="None" location="ServerAndClient" noStore="true" duration="0" />
    </outputCacheProfiles>
  </outputCacheSettings>
</caching>

现在有一件事是棘手的,对于较新版本的MVC(3和4),如果对子项应用缓存配置文件,您将得到“ InvalidOperationException:持续时间必须为正数”动作(即如果你使用@ Html.RenderAction)。因此,如果以这种方式调用您的操作,您将无法在其上使用OutputCache属性。而是在将呈现子操作的父操作上使用OutputCache属性。

示例:

public class MyController : Controller
{
    [OutputCache(CacheProfile="NoCache")]
    public ActionResult Index()
    {
        return View();
    }

    [ChildActionOnly]
    public ActionResult ChildAction()
    {
        return View();
    }
}