【发布时间】:2021-10-18 13:03:17
【问题描述】:
我有一个沼泽标准 MVC 控制器,在代码周围有一个 try/catch,以便在发生异常时能够返回一些自定义数据。这适用于直接在控制器中或直接在控制器使用的方法中抛出的异常。但是,如果在 LINQ lambda 中引发异常,则根本不会捕获异常,而是显示黄屏死机 (YSOD)。
public class MyController : Controller {
public JsonResult Index() {
try {
var data = new TestService().GetTestData();
return Json(data.Entries.Select(d => d.SomeExtensionMethod(), JsonRequestBehavior.AllowGet);
}
catch (Exception e) {
return Json("Something went wrong");
}
}
}
如果我在 try/catch 中手动抛出异常,则返回“出现问题”。如果在GetTestData() 中抛出异常,则返回“Something went wrong”。
如果d.SomeExtensionMethod() 抛出异常,则显示 YSOD。
为什么 LINQ lambda 中的异常没有被 try/catch 捕获,我该怎么做才能真正捕获它?
【问题讨论】:
标签: c# asp.net-mvc linq exception