C# 抛出异常以回滚并同时重定向到另一个操作
当发生异常时,我试图将一个操作重定向到另一个操作。另外,我想回滚 所有更改同时进行。回滚数据是通过抛出异常来完成的,但当我们抛出异常时,重定向不起作用。(我使用的框架(ABP)在抛出异常时自动处理回滚,因此代码中没有“BeginTransaction”和“Commit”等。) 当代码运行时,它只是回滚对数据的更改并显示异常,而不是重定向C# 抛出异常以回滚并同时重定向到另一个操作,c#,rollback,aspnetboilerplate,unit-of-work,transactionscope,C#,Rollback,Aspnetboilerplate,Unit Of Work,Transactionscope,当发生异常时,我试图将一个操作重定向到另一个操作。另外,我想回滚 所有更改同时进行。回滚数据是通过抛出异常来完成的,但当我们抛出异常时,重定向不起作用。(我使用的框架(ABP)在抛出异常时自动处理回滚,因此代码中没有“BeginTransaction”和“Commit”等。) 当代码运行时,它只是回滚对数据的更改并显示异常,而不是重定向 [HttpPost] public async Task<ActionResult> action1() { var exception=f
[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]
公共异步任务action1()
{
var异常=false;
尝试
{
等待方法1();
返回重定向到操作(“成功”、“结果”);
}
捕获(例外e)
{
异常=真;
返回重定向操作(“淋浴ROR”、“结果”);
}
最后
{
如果(异常==true)
抛出新异常(“1000”);
}
}
公共异步任务方法1()
{
//数据库的一些变化
}
此外,我想同时回滚所有更改。回滚数据需要抛出异常,当我们抛出异常时,重定向不起作用
不能让方法返回结果并引发异常;不是一个就是另一个
您可以做的是抛出一个异常(导致回滚),然后在操作方法中捕获它并返回一个结果:
[HttpPost]
public async Task<ActionResult> action1()
{
try
{
await method1();
return RedirectToAction("Success", "Result");
}
catch (Exception e)
{
return RedirectToAction("ShowError", "Result");
}
}
[HttpPost]
公共异步任务action1()
{
尝试
{
等待方法1();
返回重定向到操作(“成功”、“结果”);
}
捕获(例外e)
{
返回重定向操作(“淋浴ROR”、“结果”);
}
}
ABP的范围是围绕控制器的操作action1
您应该需要在try
块中范围内的新工作单元:
[HttpPost]
public async Task您在finally
块中引发异常,因此不会返回重定向到操作的返回值。通过避免回滚,捕获异常是相等的。异常从-方法1引发并传播出去。回滚系统应该因此而回滚。但是,如果自定义回滚系统需要从action1
引发异常,则需要修改自定义回滚系统,以便它能够识别和处理包含要返回结果的特定类型的异常。