Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 抛出异常以回滚并同时重定向到另一个操作_C#_Rollback_Aspnetboilerplate_Unit Of Work_Transactionscope - Fatal编程技术网

C# 抛出异常以回滚并同时重定向到另一个操作

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

当发生异常时,我试图将一个操作重定向到另一个操作。另外,我想回滚 所有更改同时进行。回滚数据是通过抛出异常来完成的,但当我们抛出异常时,重定向不起作用。(我使用的框架(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]
公共异步任务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
引发异常,则需要修改自定义回滚系统,以便它能够识别和处理包含要返回结果的特定类型的异常。