我的应用正在运行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)
但是根据它们的返回方式,它们将根据中间件导航到不同的页面。
这是为什么?
答案 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