解决服务器无法在已发送 HTTP 标头之后设置状态导致的一个问题
2017-08-17 09:25
603 查看
在错误日志中经常看到服务器无法在已发送 HTTP 标头之后设置状态的提示。英文提示应是:server cannot set status after http headers have been sent
这个问题是asp.net MVC特有的现象,在webform 中从来没出现这类问题。很清楚是服务端跳转的时候出现的问题。但是要解决很难,网上的各种办法都有尝试,但该出现还出现。成了顽疾了。这不,我在stackoverflow 上看到一个帖子写了一个解决办法,如获至宝,然后添加实行。
首先在继承AuthorizeAttribute 的类的protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
方法中增加了几行代码。
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
base.HandleUnauthorizedRequest(filterContext);
#region solution server cannot set status after http headers have been sent
var ctx = filterContext.HttpContext;
//If you are using .NET 4.5 +, add this line before Response.StatusCode
filterContext.HttpContext.Response.SuppressFormsAuthenticationRedirect = true;
ctx.Response.StatusCode = (int)HttpStatusCode.Forbidden;
ctx.Response.End();
#endregion
}
第二个,在global.asax 中的 Application_BeginRequest 增加了两行代码:
protected void Application_BeginRequest(object sender, EventArgs e)
{
Response.Clear();
// Buffer response so that page is sent
// after processing is complete.
Response.BufferOutput = true;
}
加上后观察了一天,仍然有服务器无法在已发送 HTTP 标头之后设置状态这样的错误提示,看来不起作用啊。由于没有其他影响,这些代码虽然不起作用,但是并没有删除。而过了几天,我在做页面测试的时候,突然发现,当无权限的时候,页面会出现空白,没有任何提示。而原来设置的是当无权限操作该页面的时候,跳转到无权限提示页面。当时觉得可能是浏览器新添加的安全功能。没多久,公司的同事也反应过来了这种问题,感觉这样操作很不方便。我才终于重视其这个问题。由于没权限的时候一片空白。我用fiddler
抓包软件进行测试。发觉访问此页面的时候报的是403 禁止访问。这时我才意识到,这恐怕不是浏览器新增加了安全功能,而有可能是我新添加的代码导致的问题。先禁用了global.asax 中的 Application_BeginRequest 中的两行代码,问题依旧。不是这里的问题。然后禁用继承AuthorizeAttribute 的
HandleUnauthorizedRequest 方法中的几行代码。这时,跳转到无权限页面正常了。这时在分析这几行代码
HttpStatusCode.Forbidden ,这不就是403禁止访问吗。看来这个stackoverflow 的解决方案并不适合我这个问题。
这个问题是asp.net MVC特有的现象,在webform 中从来没出现这类问题。很清楚是服务端跳转的时候出现的问题。但是要解决很难,网上的各种办法都有尝试,但该出现还出现。成了顽疾了。这不,我在stackoverflow 上看到一个帖子写了一个解决办法,如获至宝,然后添加实行。
首先在继承AuthorizeAttribute 的类的protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
方法中增加了几行代码。
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
base.HandleUnauthorizedRequest(filterContext);
#region solution server cannot set status after http headers have been sent
var ctx = filterContext.HttpContext;
//If you are using .NET 4.5 +, add this line before Response.StatusCode
filterContext.HttpContext.Response.SuppressFormsAuthenticationRedirect = true;
ctx.Response.StatusCode = (int)HttpStatusCode.Forbidden;
ctx.Response.End();
#endregion
}
第二个,在global.asax 中的 Application_BeginRequest 增加了两行代码:
protected void Application_BeginRequest(object sender, EventArgs e)
{
Response.Clear();
// Buffer response so that page is sent
// after processing is complete.
Response.BufferOutput = true;
}
加上后观察了一天,仍然有服务器无法在已发送 HTTP 标头之后设置状态这样的错误提示,看来不起作用啊。由于没有其他影响,这些代码虽然不起作用,但是并没有删除。而过了几天,我在做页面测试的时候,突然发现,当无权限的时候,页面会出现空白,没有任何提示。而原来设置的是当无权限操作该页面的时候,跳转到无权限提示页面。当时觉得可能是浏览器新添加的安全功能。没多久,公司的同事也反应过来了这种问题,感觉这样操作很不方便。我才终于重视其这个问题。由于没权限的时候一片空白。我用fiddler
抓包软件进行测试。发觉访问此页面的时候报的是403 禁止访问。这时我才意识到,这恐怕不是浏览器新增加了安全功能,而有可能是我新添加的代码导致的问题。先禁用了global.asax 中的 Application_BeginRequest 中的两行代码,问题依旧。不是这里的问题。然后禁用继承AuthorizeAttribute 的
HandleUnauthorizedRequest 方法中的几行代码。这时,跳转到无权限页面正常了。这时在分析这几行代码
HttpStatusCode.Forbidden ,这不就是403禁止访问吗。看来这个stackoverflow 的解决方案并不适合我这个问题。
相关文章推荐
- 解决MVC3 服务器无法在已发送 HTTP 标头之后设置状态 问题
- 解决MVC3 服务器无法在已发送 HTTP 标头之后设置状态 问题
- 解决MVC3 服务器无法在已发送 HTTP 标头之后设置状态 问题
- 解决"服务器无法在发送 HTTP 标头之后修改 cookie"问题
- Asp.Net服务器发送HTTP标头后无法设置内容类型的问题解决
- .Net MVC Redirect出现:服务器无法在已发送 HTTP 标头之后设置状态解决方案
- 导出Excel,出现“服务器无法在发送HTTP标头之后设置内容类型”
- Web.Config中设置Session问题,导致无法向会话状态服务器发出会话状态请求
- NPOI导出EXCEL报_服务器无法在发送 HTTP 标头之后追加标头
- 解决:无法在发送 HTTP 标头之后进行重定向。 跟踪信息: 在 System.Web.HttpResponse.Redirect(String url, Boolean endResponse, Boolean permanent) 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>……
- "... 无法下载Silverlight应用程序。请查看Web服务器设置." 问题的解决方法
- 搭建IIS服务器80端口却已被占用的问题和用了Sc config http start= disabled命令导致HTTP服务无法启动的解决方案
- 打开office出现错误:向程序发送命令时出现问题 无法更改 中注册的office 加载项的连接状态 解决办法
- 无法在发送 HTTP 标头之后进行重定向--Can not send headers after HTTP redirects
- Windows 2003 +iis 6.0 中Silverlight错误,无法下载Silverlight应用程序。请查看Web服务器设置." 问题的解决方法
- IE6下,设置了domain,导致target指向iframe时,无法打开链接的问题及解决
- Permalink to 解决iis无法启动和出现http 500内部服务器问题(xp_sp2 iis5.1)
- 提交代码到svn时服务器重启导致svn无法更新问题解决办法
- FLASH项目上传服务器无法播放FLV-MIME设置问题解决
- 无法在发送 HTTP 标头之后进行重定向