c# - 抛出异常以回滚并同时重定向到另一个动作
问题描述
当发生异常时,我试图将一个动作重定向到另一个动作。另外,我想同时回滚所有更改。回滚数据是通过抛出异常来完成的,但是当我们抛出异常时,重定向不起作用。(我使用了一个框架(ABP)在抛出异常时自动处理回滚,所以我的代码中没有“BeginTransaction”和“Commit”等。)
当代码运行时,它只是回滚对数据的更改并显示异常但不重定向。
[HttpPost]
public async Task<ActionResult> action1()
{
var exception=false;
try
{
await method1();
return RedirectToAction("Success", "Result");
}
catch (Exception e)
{
exception = true;
return RedirectToAction("ShowError", "Result");
}
finally
{
if (exception == true)
throw new Exception("1000");
}
}
public async Task<ActionResult> method1()
{
// Some changes on database
}
解决方案
此外,我想同时回滚所有更改。回滚数据需要抛出异常,当我们抛出异常时,重定向不起作用。
您不能让方法返回结果并引发异常;它是一个或另一个。
你可以做的是抛出一个异常——这会导致回滚——然后在你的操作方法中捕获它并返回一个结果:
[HttpPost]
public async Task<ActionResult> action1()
{
try
{
await method1();
return RedirectToAction("Success", "Result");
}
catch (Exception e)
{
return RedirectToAction("ShowError", "Result");
}
}
推荐阅读
- angular - 如何等待Angular中的事件完成?
- html - 如何使标题的三个背景线由两个单独的块组成?
- scala - 如何让 Http[F] 脱离上下文 F?
- flask - Sqlalchemy Flask 中的查询不返回行
- dax - Dax Divide 函数未显示替代结果
- swiftui - iPadOS 上的 SwiftUI NavigationBarItem 悬停效果
- php - 在while循环php中插入表单中的数据
- flutter - 如果我正在开发新版本,是否需要将现有应用链接到 Admob?
- python - 如何从字典列表中删除列表
- react-native - 需要在 react native 中隐藏和显示顶部选项卡导航的标题。在第一个选项卡上工作,但在另一个选项卡上失败