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

ASP.NET MVC5-发送HTTP标头后,服务器无法修改Cookie,asp.net,asp.net-mvc,cookies,Asp.net,Asp.net Mvc,Cookies,我有一个MVC站点,它给出了一个“发送HTTP头后服务器无法修改cookies”错误。它发生在_Layout.cshtml中。在那一行,有一个@Html.Action(“\u LightBoxes”),它调用一个\u LightBoxes部分视图。_lightbox部分视图的代码如下:- [ChildActionOnly] public PartialViewResult _LightBoxes() { return PartialView(); } 我读过其他有此错误的线程,但这些线

我有一个MVC站点,它给出了一个“发送HTTP头后服务器无法修改cookies”错误。它发生在_Layout.cshtml中。在那一行,有一个@Html.Action(“\u LightBoxes”),它调用一个\u LightBoxes部分视图。_lightbox部分视图的代码如下:-

[ChildActionOnly]
public PartialViewResult _LightBoxes()
{
    return PartialView();
}
我读过其他有此错误的线程,但这些线程似乎都在执行重定向或类似操作,在这个控制器中,它只是返回一个空的部分视图

有人对造成这种情况的原因有什么建议吗?它可能是PartialView中对另一个控制器的引用,而这实际上是导致此错误的原因吗

编辑-2015年1月26日 我想这可能就是问题所在。这是一个局部视图,从该行的PartialView中调用。下面是Facebook登录按钮的代码,其中cookies设置为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>

//Facebook登录按钮
window.fbAsyninit=函数(){
FB.init({
appId:@(System.Configuration.ConfigurationManager.AppSettings[“facebook_appId”].ToString()),//应用程序ID
//channelUrl:'//WWW.YOUR_DOMAIN.COM/channel.html',//频道文件
状态:true,//检查登录状态
cookie:false,//启用cookie以允许服务器访问会话
oauth:true,//启用oauth 2.0
xfbml:true//解析xfbml
});
$(“fblogin”).show();
};
(职能(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);
}(文件);
//结束Facebook
谢谢,
Mike.

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

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


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

当服务器完全关闭并将头发送到客户端浏览器时,您正在尝试修改HttpCookie。看看这个答案,看看你的灯箱里有什么。cshtml?谢谢。我们有一个公共功能的实用程序项目,它作为DLL与网站一起发送。Response.Write()可能是其中的原因?@MikeUpjohn-因为我看不到你的代码,也不知道它是如何调用的,所以我不知道。。但是,如果存在从控制器方法(而不是在视图中)调用的Response.Write(),那么是的,这是可能的。因为,看起来您有一个视图,其中包含尝试编写cookie的代码(your _LightBox.cshtml)。一般来说,你不应该直接在MVC中写回复,尤其是在视图之外。是的,我确实找到了一个,所以我改变了这一点,看看这个问题是否会在周末停止。谢谢我刚刚用一些新代码更新了上面的内容,我认为可能是这些代码导致了这个问题?@MikeUpjohn-这不太可能,因为这将是facebook提出的一个完全不同的请求。这与来自服务器的请求无关。