我从try-catch块调用 SetRegisterEditableForQc 方法。此方法在条件中引发异常。但Action方法无法捕获它。 为什么try-catch块没有捕获到这个异常?
来电者(MVC中的一项行动):
public ActionResult SetEditableRegisterByQc(int mainId)
{
try
{
new RegisterTestBll().SetRegisterEditableForQc(mainId);
return Json(new { successBalloon = "Successful" });
}
catch (Exception e)
{
return Json(new { successBalloon = e.Message });
}
}
方法(SetRegisterEditableForQc):
public void SetRegisterEditableForQc(int mainId)
{
var mainTest = GetRegistration(mainId);
var userId = mainTest.CommonMainTestRegisterVM.UserId;
var roles = new LoginBll().GetRoles(userId);
if(roles.Any(r=> r.RoleId == (int)RoleEnum.Qc)
MainResgistrationDataClass.SetEditableStatusForQc(mainId, true);
else
{
throw new Exception("NEW Exception");
}
}
结果是客户端 内部服务器错误 。
浏览器出错:
描述:执行期间发生了未处理的异常 当前的网络请求。请查看堆栈跟踪了解更多信息 有关错误的信息以及它在代码中的起源。
异常详细信息:System.Exception:NEW Exception
来源错误:
第92行:否则第93行:{第94行:
抛出新的异常(" NEW Exception");第95行:}第96行: }
堆栈追踪:
[例外:新例外]
Shoniz.Labroatory.BLL.Registeration.RegisterTestBll.SetRegisterEditableForQc(的Int32 mainId)in d:\实验室\实验室\ BLL \ Registeration \ ItemRegisterBll.cs:94
Shoniz.Labroatory.Controllers.ItemRegisterController.SetEditableRegisterByQc(的Int32 mainId)in d:\实验室\实验室\实验室\ \控制器ItemRegisterController.cs:312 lambda_method(Closure,ControllerBase,Object [])+96
System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller,Object []参数)+14
System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext,IDictionary2 parameters) +157
2 参数)+27
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary
System.Web.Mvc.Async.AsyncControllerActionInvoker.b__39(IAsyncResult的 asyncResult,ActionInvocation innerInvokeState)+22
System.Web.Mvc.Async.WrappedAsyncResult2.CallEndDelegate(IAsyncResult asyncResult) +29
1.End()+49
System.Web.Mvc.Async.WrappedAsyncResultBase
答案 0 :(得分:0)
在调用Json方法时,可以再次尝试添加可选的JsonRequestBehavior.AllowGet
参数吗?您的异常可能由catch块内的Json(...)方法中的另一个问题触发。
public ActionResult SetEditableRegisterByQc(int mainId)
{
try
{
new RegisterTestBll().SetRegisterEditableForQc(mainId);
return Json(new { successBalloon = "Successful" });
}
catch (Exception e)
{
return Json(new { successBalloon = e.Message }, JsonRequestBehavior.AllowGet);
}
}