Sun*_*ilA 5 exception asp.net-core-mvc .net-core
我正在使用 dotnet core 并创建了一个自定义异常过滤器来处理异常。我面临的问题是,如果出现异常,自定义过滤器中的 onException 方法会被调用两次。下面是代码:
public class CustomExceptionFilter : ExceptionFilterAttribute
{
public override void OnException(ExceptionContext context)
{
// Code
base.OnException(context);
}
}
Run Code Online (Sandbox Code Playgroud)
控制器代码是:
[CustomExceptionFilter]
public class MyController : Controller
{
// Raise an exception in any apis
}
Run Code Online (Sandbox Code Playgroud)
为什么 onException 会被调用两次?
我使用 Visual Studio 创建了一个新的 Asp.Net Core Web 应用程序并使用了标准 Web 应用程序模板。然后我添加了该类CustomExceptionFilter,并将[CustomExceptionFilter]属性添加到了HomeController它的方法中并引发了异常Index:
[CustomExceptionFilter]
public class HomeController : Controller
{
public IActionResult Index()
{
throw new Exception("Time to bail!");
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
最后,我在以下行中设置了一个断点CustomExceptionFilter:
base.OnException(context);
Run Code Online (Sandbox Code Playgroud)
并运行了该网站。调试器停在throw当然,然后停在带有断点的行上。断点仅被击中一次。所以我的设置验证了预期的行为。
故障排除
过去,我遇到过类似的情况,一些只应该被调用一次的东西被调用了两次,而且几乎总是因为第二个 http 请求进来,而我没有预料到。所以每个 http 请求实际上只被调用一次。检查这一点的一种方法是查看路径并在方法中进行查询,您可以执行以下操作:
public class CustomExceptionFilter : ExceptionFilterAttribute {
public override void OnException(ExceptionContext context) {
//set breakpoing on the following line to see what the requested path and query is
string pathAndQuery = context.HttpContext.Request.Path + context.HttpContext.Request.QueryString;
// Code
base.OnException(context);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3713 次 |
| 最近记录: |