如何在我的ASP.NET应用程序中模拟HTTP 500错误?

25

我希望模拟这个错误,以便检查是否显示了通用的错误页面,而不是HTTP 500页面。考虑到最近的安全漏洞。

我们在网站本身中包含了404和403的特殊处理,因此我想确保没有特殊处理的错误也能正常工作。

6个回答

41
throw new Exception();
这将生成一个HTTP 500错误。

那正是我想说的(: - Erik Escobedo
我可以使用这个 return new HttpStatusCodeResult(500); 吗? - Unbreakable

4

我认为您可以通过覆盖页面初始化并向响应添加500状态代码来完成此操作,如下所示:

protected void Page_Init(object sender, EventArgs e)
{
    Response.Clear();
    Response.StatusCode = 500;
    Response.End(); 
}

享受吧!


1
当使用 throw new Exception() 时,返回了状态码为200的错误消息。通过直接在代码中重写状态码 Response.StatusCode = 500,成功解决了问题。 - sigeje
我可以使用这个 return new HttpStatusCodeResult(500); 吗? - Unbreakable

2

以下是一种不需要修改您的网站就能实现的方法:

  1. 在您的网页浏览器中,打开包含回发表单的页面。
  2. 按下F12键打开开发人员工具。
  3. 从HTML选项卡中搜索 __VIEWSTATE ,并更改其值。
  4. 提交该表单

这将导致"Validation of viewstate MAC failed" ASP.Net异常,并返回500内部服务器错误HTTP响应代码。

破坏web.config文件也可以实现此目的。但如果您试图测试web.config中的某些设置(例如失败请求跟踪),则会失去此目的。


1
我可以使用 return new HttpStatusCodeResult(500); 吗? - Unbreakable

2
修改您的dll文件名称。如果在请求路由之后它无法找到控制器,应用程序将崩溃。 我使用这个来测试我的日志记录。

这对我很有用,而且是测试自定义错误是否仅在远程显示的快速方法。 - AndyS

0

你可以破坏web.config文件。放置一个畸形标签进行测试。


-1

这将在经典 ASP 中生成自定义的 HTTP 错误代码。

<%@language=Jscript%>

<%
    Response.Status = "996 TerraNova GeoWeb Internal Server Error";
    Response.End;
%>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接