【问题标题】:MVC async function not catching exceptionMVC 异步函数未捕获异常
【发布时间】:2020-08-24 16:31:53
【问题描述】:

我对 MVC 中的异步编程没有太多经验,我不确定发生了什么。 我有一个具有功能的 MVC 控制器:

        [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> SectionMassUpdate(SectionMassUpdateViewModel model)
        {
            if (ModelState.IsValid)
            {

                var status = _sectionService.Update(model.SectionID, model.CompID, model.DateCompleted);

                if (!status.IsValid)
                {
                    ModelState.AddValidationErrors(status);

                }
                else { return Json(new { success = true }); }

            }

            return PartialView("_sectionUpdate", model);
        }

在这个 post 函数中,你可以看到它调用了另一个类中的函数。被调用的函数

public ServiceStatus Update(int sectionID, int compID, DateTIme dateCompleted)
{
     throw new Exception();
}

事实上,当我发布到控制器中的 SectionMassUpdate 函数时,什么也没有发生。它去调用,并且没有抛出异常或任何东西。如果我使 SectionMassUpdate 函数同步并删除异步和任务,则会引发异常。为什么会这样,我该怎么做才能抛出异常而不是页面什么都不做。

【问题讨论】:

  • 你真的在等待函数吗?如果你不这样做,异常被多任务吞没是很常见的:stackoverflow.com/questions/61689900/…
  • 这不可能!你确定ModelState.IsValidtrue 吗?不可能。

标签: c# asp.net-mvc async-await


【解决方案1】:

简单的答案是让你的服务方法更新异步并在控制器的调用语句中使用等待。

【讨论】:

  • ModelState.IsValid 是真的 Paulo Morgado。当我单步执行时,它会进入 Update 调用,然后停止调试。什么都没有发生,并且 hte 应用程序正在运行。我可以点击页面上的提交按钮,调试又开始单步执行。我已经将两种方法(控制器方法和服务更新方法)都更改为异步,并且仍然没有抛出异常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-18
  • 2014-06-03
  • 1970-01-01
  • 2010-10-11
  • 2011-08-12
  • 2013-04-20
相关资源
最近更新 更多