我需要检查我们的访问者是否使用HTTPS。在BasePage中,我检查请求是否来自HTTPS。如果不是,我会使用HTTPS重定向。但是,当有人来到网站并使用此功能时,我收到错误:
System.Web.HttpException:Server HTTP后无法追加标头 标题已发送。在 System.Web.HttpResponse.AppendHeader(字符串 name,String value)at System.Web.HttpResponse.AddHeader(字符串 name,String value)at Premier.Payment.Website.Generic.BasePage..ctor()
以下是我开始使用的代码:
// If page not currently SSL
if (HttpContext.Current.Request.ServerVariables["HTTPS"].Equals("off"))
{
// If SSL is required
if (GetConfigSetting("SSLRequired").ToUpper().Equals("TRUE"))
{
string redi = "https://" +
HttpContext.Current.Request.ServerVariables["SERVER_NAME"].ToString() +
HttpContext.Current.Request.ServerVariables["SCRIPT_NAME"].ToString() +
"?" + HttpContext.Current.Request.ServerVariables["QUERY_STRING"].ToString();
HttpContext.Current.Response.Redirect(redi.ToString());
}
}
我也尝试在上面添加它(我在其他网站上使用了一点类似的问题):
// Wait until page is copletely loaded before sending anything since we re-build
HttpContext.Current.Response.BufferOutput = true;
我在IIS 6上使用.NET 3.5中的c#。
答案 0 :(得分:5)
乍得, 你重定向时尝试结束输出了吗?您可以将第二个参数设置为true,以告知输出在发出重定向标头时停止。或者,如果您正在缓冲输出,那么在执行重定向之前可能需要清除缓冲区,因此标题不会与重定向标题一起发送。
布赖恩
答案 1 :(得分:2)
此错误通常表示在启动重定向之前已将某些内容写入响应流。所以你应该确保在页面加载函数中完成https的测试。