ASP.NET MVC5 - 在发送HTTP标头后,服务器无法修改cookie

时间:2015-01-23 15:24:50

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

我有一个MVC网站,它提供“服务器在发送HTTP标头后无法修改cookie”。错误。它发生在_Layout.cshtml中。在该行,有一个@ Html.Action(“_ LightBoxes”),它调用_LightBoxes局部视图。 _LightBoxes部分视图的代码很简单: -

[ChildActionOnly]
public PartialViewResult _LightBoxes()
{
    return PartialView();
}

我已经阅读了其他带有此错误的线程,但这些似乎都在执行重定向或类似操作,而在此控制器中它只返回一个空的部分视图。

有没有人对导致这种情况的原因有任何建议?它可能是PartialView内部引用到另一个实际导致此错误的控制器吗?

编辑 - 2015年1月26日 我认为这可能是个问题。这是在PartialView中从该行调用的部分视图。下面的代码,用于Facebook登录按钮,其cookie设置为true。

<script type="text/javascript">
    //Facebook Login Button
    window.fbAsyncInit = function () {
        FB.init({
            appId: "@(System.Configuration.ConfigurationManager.AppSettings["facebook_appid"].ToString())", // App ID
            //channelUrl : '//WWW.YOUR_DOMAIN.COM/channel.html', // Channel File
            status: true, // check login status
            cookie: false, // enable cookies to allow the server to access the session
            oauth: true, // enable OAuth 2.0
            xfbml: true  // parse XFBML
        });
        $("fblogin").show();
    };
    (function (d) {
        var js, id = 'facebook-jssdk'; if (d.getElementById(id)) { return; }
        js = d.createElement('script'); js.id = id; js.async = true;
        js.src = "//connect.facebook.net/en_US/all.js";
        d.getElementsByTagName('head')[0].appendChild(js);
    }(document));
    //End Facebook
</script>

谢谢, 麦克

1 个答案:

答案 0 :(得分:0)

这通常是在MVC应用程序中由于在应用程序中某处不恰当地使用Response.Write()引起的(它甚至不需要在导致问题的代码中)。 MVC设计用于在控制器完成处理后呈现页面,并将它们呈现到输出缓冲区,最后将其写入输出最末端的响应。

如果您的管道中某处有代码执行Response.Write(),然后您尝试编写cookie,但在实际呈现视图之前,您会遇到此问题。

因此,请搜索不在视图中的Response.Write()代码。