可能在ASP.Net页面中抛出404错误?

Ear*_*rlz 22 asp.net exception http

我想知道是否可以从页面中抛出404错误(代码隐藏)?或者甚至可能抛出任何其他类型的错误页面,如408(超时)或401(需要验证)?

注意:我不只是想让页面返回404的状态代码,我希望它使用ASP.Net(或我的CustomErrors)404错误页面.

在后面的代码中有类似的东西:

if(id>10){ //if id is greater than 10, then it doesn't exist here
  throw 404Error();
}
Run Code Online (Sandbox Code Playgroud)

Dar*_*rov 34

您可以抛出HttpException并设置相应的状态代码:

throw new HttpException(404, "Not found");
Run Code Online (Sandbox Code Playgroud)

它还可以与其他状态代码一起使用.只是关于401的评论:你可能知道ASP.NET MVC何时检测到这个代码,它会自动将你重定向到登录页面,获得401状态代码的自定义错误页面可能是一个真正的PITA来实现.

  • @Earlz,如果`customErrors ="Off"`你可能会得到一个YSOD. (3认同)

Geo*_*kos 19

一个更好的方法是:

'Throws a 404 Not found:
Response.Clear()
Response.StatusCode = 404
Response.End()
Run Code Online (Sandbox Code Playgroud)

没有必要抛出异常,并且在web.config中使用自定义错误页面时,上述工作要好得多

  • `Response.End()`应该避免,因为它是Classic ASP的结转.它引发了一个`ThreadAbortException`,它在重负载环境中不能很好地运行.而是在编写错误消息后调用`HttpContext.Current.ApplicationInstance.CompleteRequest`并在必要时设置`Response.SuppressContent = true`. (3认同)
  • 您还可以在System.Net.HttpStatusCode中使用枚举。 (2认同)
  • 如果您在“Page_Load”(或任何预渲染代码)中,则不必使用“Clear()”和“End()”——它会渲染页面并正确设置响应的 404 状态(如果那是你想要的)。`Response.End()` 实际上有点糟糕。这里有一个很好的解释 /sf/answers/274202631/ (2认同)