gpt4 book ai didi

asp.net-mvc - MVC 中的错误处理

转载 作者:行者123 更新时间:2023-12-04 18:51:58 27 4
gpt4 key购买 nike

我在 MVC 中的错误处理上挣扎了几天。我仍然没有做对。 (我也在 SO 上阅读了大部分问题,并在 google 上搜索,直到我的手指流血)

我想做的事:

  • 使用标准[Authorize]属性
  • 将所有错误重定向到我的错误 Controller (包括未经授权的)
  • 在我的错误 Controller 中为每个 HTTP 错误执行一个操作。

  • 我不想做的事情:
  • [ErrorHandler]在我所有的 Controller 上(可以在我的基本 Controller 上使用)?
  • 使用自定义授权属性。

  • 实际上,只要我让 #1-3 工作,我就可以做任何必要的事情(包括 NOT 列表)。

    我试过的:
  • 使用 Application_Error
  • 使用 Controller.HandleUnknownAction
  • 使用 Controller.OnException
  • 使用 [ErrorHandler]在我的 Controller 上
  • 开启/关闭 CustomErrors在 web.config

  • 猜猜我需要这些或其他东西的组合?

    最佳答案

    您还可以在 Application_Error 中处理所有错误逻辑。您的 Global.asax.cs然后根据不同的 HTTP 状态代码动态路由它们:

    protected void Application_Error(object sender, EventArgs e)
    {
    var ex = Server.GetLastError().GetBaseException();

    var routeData = new RouteData();

    if (ex.GetType() == typeof(HttpException))
    {
    var httpException = (HttpException)ex;

    switch (httpException.GetHttpCode())
    {
    case 401:
    routeData.Values.Add("action", "NotAuthorized");
    break;
    case 403:
    routeData.Values.Add("action", "NotAuthorized");
    break;
    case 404:
    routeData.Values.Add("action", "PageNotFound");
    break;
    default:
    routeData.Values.Add("action", "GeneralError");
    break;
    }
    }
    else
    {
    routeData.Values.Add("action", "GeneralError");
    }

    routeData.Values.Add("controller", "Error");
    routeData.Values.Add("error", ex);

    IController errorController = new ErrorController();
    errorController.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));
    }

    看来 401没有必要抛出 HttpException所以你想手动处理它以适应逻辑:
    protected void Application_EndRequest(object sender, EventArgs e)
    {
    if (Context.Response.StatusCode == 401)
    {
    throw new HttpException(401, "You are not authorised");
    }
    }

    是的,您的 Controller 继承了基本 Controller 的属性。

    关于asp.net-mvc - MVC 中的错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4883693/

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