Asp.net mvc ASP.NET MVC 2和IIS 7.0的错误处理

Asp.net mvc ASP.NET MVC 2和IIS 7.0的错误处理,asp.net-mvc,asp.net-mvc-2,iis-7,iis-6,Asp.net Mvc,Asp.net Mvc 2,Iis 7,Iis 6,你好 我最近从IIS 6.0切换到IIS 7.x,我正在寻找我梦想中的ASP.NET MVC 2错误处理技术 我想要实现的是: 在一个位置处理所有未处理的异常(最好是在Global.asax处理程序中) 404和403错误的自定义处理程序(用于MVC控制器\操作和静态文件)。这些处理程序不应该执行重写,应该发送HTTP错误代码。 例如,若用户导航到,他应该保持在这个URL上,但得到HTTP 404状态和自定义404页面 能够从操作中以编程方式触发404和403错误。例如,如果用户在分页中指定了

你好

我最近从IIS 6.0切换到IIS 7.x,我正在寻找我梦想中的ASP.NET MVC 2错误处理技术

我想要实现的是:

  • 在一个位置处理所有未处理的异常(最好是在Global.asax处理程序中)

  • 404和403错误的自定义处理程序(用于MVC控制器\操作和静态文件)。这些处理程序不应该执行重写,应该发送HTTP错误代码。 例如,若用户导航到,他应该保持在这个URL上,但得到HTTP 404状态和自定义404页面

  • 能够从操作中以编程方式触发404和403错误。例如,如果用户在分页中指定了不存在的页码,如下所示:

  • 如果此错误处理对VS Development Server同样有效,那就太好了(我知道IIS Express,但现在我应该坚持使用VS Dev Server)

我用过这个: 在IIS 6.0上,但现在在集成管道的IIS 7.0上,我看到的是IIS错误消息,而不是我的处理程序

提前谢谢

我使用

protected void Application_Error(object sender, EventArgs e)
在my
Global.asax.cs

要捕获所有未处理的异常,请在其内部执行以下操作:

try
{
    Response.Clear();
    var errorController = new ErrorController();
    var result = errorController.Error(statusCode, exception);
    result.ExecuteResult(new ControllerContext(new RequestContext(new HttpContextWrapper(Context), routeData), errorController));
    Server.ClearError();
}
catch(Exception e)
{
    HttpContext.Current.Response.StatusCode = 500;
    HttpContext.Current.Response.Write(e.Message);
}
我的错误控制器如下所示:

public ActionResult Error(HttpStatusCode statusCode, Exception exception)
{
    var resource = new ErrorResource(statusCode, exception);
    this.response.StatusCode = resource.StatusCode;

#if !DEBUG
    return View("ReleaseError", resource);
#endif

    return View("DebugError", resource);            
}
我可以这样做:

throw new HttpException(404, "not found");

等等


我认为MVC2为错误案例引入了一个新的操作结果,虽然没有使用它,但可能与框架的其他部分一样糟糕。

-1因为您的最后一条评论。太糟糕了,因为我喜欢你的解决方案。如果你认为ASP.NET MVC是一个很好的框架,那你就大错特错了。老实说,我没有粗鲁。您曾经使用过Rails或OpenRasta吗?关于MVC的一切都设计得很糟糕,路由、伪请求“管道”(我使用的是最宽松的术语)、控制器概念、操作结果及其调用、错误处理(正如我们这里所说的)以及WebForms视图引擎。说真的,告诉我为什么MVC的任何部分都能很好地组合在一起?谢谢你的回答,那么IIS级别本身的自定义错误设置呢?@Andrew,否决票并不是因为我不同意你的评论,而是我觉得关于函数/方法的问题不是对框架优点进行主观评论的合适地方。我认为,之所以成为这样一个好网站,部分原因是“FrameworkX是sux”评论中很少有感叹词。火焰之战开始的时间不多:)@artvolk我在IIS中设置了一个500秒的扁平HTML页面,以备万一一切都死掉,最坏的情况下会退回。这必须只是一个html页面(没有服务器端代码),因为如果iis遇到此问题,则会出现严重错误(例如asp.net不工作)
throw new HttpException(403, "not found);