gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 20:04:13 26 4
gpt4 key购买 nike

再会!

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

我想要达到的目标:

  • 在一个地方处理所有未处理的异常(最好在 Global.asax 处理程序中)
  • 404 和 403 错误的自定义处理程序(适用于 MVC Controller \操作和静态文件)。这些处理程序不应执行重写,而应发送 HTTP 错误代码。
    例如,如果用户导航到 http://example.com/non-existing-page/他应该保留在此 URL 上,但会获得 HTTP 404 状态和自定义 404 页面。
  • 能够通过操作以编程方式触发 404 和 403 错误。例如,如果用户在分页中指定了不存在的页码,如下所示:http://example.com/posts/page-99999/
  • 如果这个错误处理对 VS 开发服务器同样有效,那就太好了(我知道 IIS Express,但现在我应该坚持使用 VS 开发服务器)

  • 我用过这个: http://blogs.microsoft.co.il/blogs/shay/archive/2009/03/06/real-world-error-hadnling-in-asp-net-mvc-rc2.aspx
    虽然在 IIS 6.0 上,但现在在带有集成管道的 IIS 7.0 上,我看到的是 IIS 错误消息而不是我的处理程序。

    提前致谢!

    最佳答案

    我用

    protected void Application_Error(object sender, EventArgs e)

    在我的 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);
    }

    我的错误 Controller 如下所示:
    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");

    或者
    throw new HttpException(403, "not found);

    以编程方式等。

    我认为 MVC2 为错误情况引入了一个新的操作结果,但没有使用它,可能像框架的其余部分一样臭。

    关于asp.net-mvc - ASP.NET MVC 2 和 IIS 7.0 的错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3545906/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com