gpt4 book ai didi

.net - OnException - 两次调用

转载 作者:行者123 更新时间:2023-12-01 18:11:57 26 4
gpt4 key购买 nike

我有带有 OnException 处理程序的 BaseController 类。

public class ApiBaseController : Controller
{
protected override void OnException(ExceptionContext filterContext)
{
filterContext.Result = ...
filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.BadRequest;
filterContext.ExceptionHandled = true;
}
}

我继承的 Controller 在其操作上有自定义的 HandleJsonError:

public class ApiCompanyController : ApiBaseController
{
[HttpPost, HandleJsonError]
public ActionResult Delete(int id)
{
// ...
if (...) throw new DependentEntitiesExistException(dependentEntities);
// ...
}
}

HandleJsonError 是:

public class HandleJsonError : HandleErrorAttribute
{
public override void OnException(ExceptionContext exceptionContext)
{
// ...
exceptionContext.ExceptionHandled = true;
}
}

当出现 DependentEntitiesExistException 异常时,将调用基本 Controller 和 HandleJsonError 的 OnException 处理程序。如何在 HandleJsonError 的 OnException 完成后不调用基本 Controller OnException?

最佳答案

检查您的基本 Controller 是否已处理异常。如果是,则跳过该方法执行:

public class ApiBaseController : Controller
{
protected override void OnException(ExceptionContext filterContext)
{
//Do not continue if exception already handled
if (filterContext.ExceptionHandled) return;

//Error handling logic
filterContext.Result = ...
filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.BadRequest;
filterContext.ExceptionHandled = true;
}
}
PS。新年快乐! :)

关于.net - OnException - 两次调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20869379/

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