2015-11-03 27 views
6

UPDATE:设置响应状态代码会导致不必要的错误文本在自定义错误页的顶部

为了确保正确的状态代码返回给浏览器,该error.aspx有这样一行:

<% Response.StatusCode = 500; %> 

删除它删除不需要的文本,但我想要正确的状态码,所以我想这是新的问题......怎么样?

设置响应状态代码有相同的结果:

HttpContext.Current.Response.StatusCode = 500; 

将更新问题称号。

PRE-UPDATE:

由于一些遗留代码/配置,我们有一个不太寻常的自定义错误页面设置,它处理异常的global.asax并使用Server.Transfer()提出相应的.aspx错误页面,像这样:

public void Application_Error(object sender, EventArgs e) 
{ 
    // abbreviated to clear out logging and some other logic that determines which error page to show 

    HttpContext.Current.Response.Clear(); 
    HttpContext.Current.Server.ClearError(); 

    var context = HttpContext.Current; 
    if (context != null) 
    { 
     var errorPage = "~/ErrorPages/error.aspx"; 
     context.Server.Transfer(errorPage); 
    } 
} 

的问题是,当error.aspx被示出为一个远程用户错误消息(和一个新的开口body标签...)被预设于页面,因此的第一行页面是无风格的文字说:

The page cannot be displayed because an internal server error has occurred. 

不理想,而且,虽然也许我的谷歌搜索错误的东西,它似乎并没有是是有据可查的或经常讨论的一个问题。

任何想法欢迎。 error.aspx代码是非常通用的,但我很高兴发布,如果它可能有帮助 - 请仅评论。

+0

嗨@Siva戈帕尔,我没有尝试,和其他各种东西。原来我需要在web.config中设置existingResponse。看到我的答案。无论如何感谢你的想法。 – GP24

回答

0

我在自定义登录和处理错误方面做了很多工作。学到了很多。而现在我在Linux上并且无法给出确切的响应,但我建议看看周围的HttpResponse访问者和HttpResponse.Write()方法。它会在不假装的情况下替换错误页面的全部内容。

此外,您可以在web.config文件中设置此页面。

补充: 放入你的web.config这样的:

<configuration> 
    <system.webServer> 
     <httpErrors> 
      <remove statusCode="500" /> 
     </httpErrors> 
    </system.webServer> 
</configuration> 
+0

谢谢@vitalii,这不是一个坏主意!虽然我尝试进行服务器传输的时间已经清除了响应。而且我知道你可以使用web.config更优雅地做到这一点,但是我在这个项目上坚持使用传统的管道模式,所以不是一个选项。 – GP24

+0

@ GP24尝试在__Transfer__之前添加__HttpResponse.Clear()__方法。它清除与_HttpContext.Current.Response.Clear()_不同的缓冲区。 – vitalii

+0

谢谢@vitalii,不幸的是,值得检查。另外,你确定他们不同吗? – GP24

0

你有没有试过End the request

HttpContext.Current.Response.End() 

到Response.End MSDN():将所有当前缓冲输出到客户端,停止页面的执行,并引发EndRequest事件。

+0

结束响应,然后尝试服务器传输导致HttpException。一个有趣的想法,但。你在这里有什么想法?也许这里有一些东西... – GP24

+0

原来这是aspx中的这一行:<%Response.StatusCode = 500; %>。仅在远程访问时才会发生。我希望将正确的状态码返回给浏览器。 – GP24

相关问题