为什么异常会重定向到不同的页面?

时间:2016-06-23 10:20:26

标签: c# asp.net-core asp.net-core-mvc

我的应用正在运行ASP.NET Core RC2,我对状态代码和异常处理程序中间件的工作原理感到困惑。

我的应用配置了以下中间件。

app.UseStatusCodePagesWithReExecute("/Error/Status/{0}");
app.UseExceptionHandler("/Error/ServerError");

控制器处理它应返回的视图:

[HttpGet]
public IActionResult Status(int id)
{
    switch (id)
    {
        case 404:
            return View("404");
        case 400:
            return View("400");
        case 500:
            return View("500");
        default:
            return View("501");
    }
}

[HttpGet]
public IActionResult ServerError()
{
    return View();
}

当我导航到未知网址时,它会按照预期的状态操作返回404 page

当我导航到引发异常的操作时,它将导航到/Error/ServerError而不是状态操作中的500 page

public IActionResult ThrowException()
{
    throw new Exception();
}

如果我导航到返回StatusCodeResult(500);的操作,则会从状态操作返回500 page

[HttpGet]
public IActionResult Error500()
{
    return new StatusCodeResult(500);
}

令我困惑的是控制台显示两个结果都返回500 (Internal Server Error)但是根据它们的返回方式,它们将根据中间件导航到不同的页面。

enter image description here

这是为什么?

1 个答案:

答案 0 :(得分:4)

  

当我导航到抛出异常的操作时,它将导航到/ Error / ServerError而不是状态操作中的500页。

这是预期的,因为ExcetionHandlerMiddleware处理未处理的异常,并且还注册了::class状态代码页中间件,因此在响应结束时首先执行。我相信即使您重新订购这些中间件,您也不会看到行为上的差异,因为状态代码页中间件会在传出的HttpResponse实例上查找状态代码,如果出现未处理的异常,则可能无法设置。

<强>更新 回应评论。您可以执行以下操作:

Public Sub CommandButton1_Click()
'DECLARE AND SET VARIABLES
Dim wbk As Workbook
Dim Filename As String
Dim Path As String
Dim mainwb As Workbook
Dim ws As Worksheet
 Dim search_result As Range   'range search result
    Dim blank_cell As Long
Dim wb As Workbook
Path = "D:\Testing\Data\Input\"
Filename = Dir(Path & "*.xls")
'--------------------------------------------
'OPEN EXCEL FILES
 Do While Len(Filename) > 0  'IF NEXT FILE EXISTS THEN
    Set wbk = Workbooks.Open(Path & Filename)
    'MySheet = Application.Caller.Worksheet.Name
    'Set sh = MySheet()
   'Variable = ActiveSheet.Name
  ' Sheets(Variable).Range("A1:D1").Copy
    'Sheets("Sheet2").Column(B2).Select.Activate.Paste
   ' Sheets("Sheet2").Active
    'Columns("B2").Select
  Set wbk = ActiveWorkbook
  Variable = ActiveSheet.Name
  wbk.Sheets(Variable).Rows(1).EntireRow.Copy

 Workbooks("Tool.xlsm").Activate
' Workbooks("DFT Tool.xlsm").Sheets("Sheet2").Activate
'ActiveWorkbook.ActiveSheet

  'Sheets("Sheet2").Activate
    'ActiveSheet.Columns("E").Select
  ' Range("E1").End(xlDown).Offset(1, 0).Select
    'ActiveSheet.Paste

 Set wb = ActiveWorkbook
  Set ws = wb.Sheets("Sheet2")
    For Each cell In ws.Columns(3).Cells
        If IsEmpty(cell) = True Then cell.Select: Exit For
    Next cell
 Selection.PasteSpecial Paste:=xlPasteValues, Transpose:=True

' Selection.PasteSpecial Paste:=xlPasteValues, Transpose:=True
    wbk.Close savechanges:=False
    Filename = Dir
Loop
End Sub