try-catch块

时间:2018-02-15 07:56:08

标签: c# asp.net-mvc exception try-catch

我从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,IDictionary 2 parameters) +157
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary
2   参数)+27
  System.Web.Mvc.Async.AsyncControllerActionInvoker.b__39(IAsyncResult的   asyncResult,ActionInvocation innerInvokeState)+22
  System.Web.Mvc.Async.WrappedAsyncResult 2.CallEndDelegate(IAsyncResult asyncResult) +29
System.Web.Mvc.Async.WrappedAsyncResultBase
1.End()+49

1 个答案:

答案 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);
    }
 }