首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在ASP.Net中发送状态码500,同时仍然写入响应?

如何在ASP.Net中发送状态码500,同时仍然写入响应?
EN

Stack Overflow用户
提问于 2010-12-21 11:11:39
回答 3查看 65.3K关注 0票数 67

我有一个ASP.Net单文件web服务(一个包含IHttpHandler实现的.ashx文件),它需要能够以500内部服务器错误状态码作为响应返回错误。在PHP中这是一件相对简单的事情:

代码语言:javascript
复制
header("HTTP/1.1 500 Internal Server Error");
header("Content-Type: text/plain");
echo "Unable to connect to database on $dbHost";

ASP.Net (C#)等效项应为:

代码语言:javascript
复制
Context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
Context.Response.ContentType = "text/plain";
Context.Response.Write("Unable to connect to database on " + dbHost);

当然,这并不像预期的那样工作;相反,IIS截取500状态代码,丢弃我写入Response对象的所有内容,并发送调试信息或自定义错误页面,具体取决于应用程序的配置。

我的问题--如何抑制这种IIS行为,并直接从我的IHttpHandler实现发送错误信息?

这个应用程序是PHP的一个移植;客户端已经编写好了,所以我基本上坚持使用这个规范。遗憾的是,发送带有200状态代码的错误并不符合要求。

理想情况下,我需要以编程方式控制行为,因为这是我们希望分发的SDK的一部分,而不需要任何“编辑此文件”和“更改此IIS设置”的补充指令。

谢谢!

编辑:已排序。Context.Response.TrySkipIisCustomErrors = true就是门票。哇。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-12-22 09:10:48

Context.Response.TrySkipIisCustomErrors = true

票数 113
EN

Stack Overflow用户

发布于 2010-12-21 11:28:08

我在过去使用过以下代码,并且能够使用下面Page_Load方法中显示的代码抛出带有自定义消息的503错误。我在负载均衡器后面使用此页面作为负载均衡器的ping页面,以了解服务器是否在服务中。

希望这能有所帮助。

代码语言:javascript
复制
        protected void Page_Load(object sender, System.EventArgs e)
    {
        if (Common.CheckDatabaseConnection())
        {
            this.LiteralMachineName.Text = Environment.MachineName; 
        }
        else
        {
            Response.ClearHeaders();
            Response.ClearContent(); 
            Response.Status = "503 ServiceUnavailable";
            Response.StatusCode = 503;
            Response.StatusDescription= "An error has occurred";
            Response.Flush();
            throw new HttpException(503,string.Format("An internal error occurred in the Application on {0}",Environment.MachineName));  
        }
    }
票数 12
EN

Stack Overflow用户

发布于 2010-12-21 11:17:09

您可能希望设置一个customErrors页面(可通过web.config配置)。您可以在会话中跨请求存储您的内容(或通过另一种机制),然后将asp.net配置为显示自定义错误页面,该页面反过来显示您的自定义输出。

但是需要注意的是:如果500是由应用程序的基本问题(即StackOverflowException)引起的,而您试图显示一个依赖于asp.net (即MyCustomErrors.aspx)的页面,那么您可能会陷入循环。

有关更多信息,请查看this page

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4495961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档