2016-04-07 152 views
1

我試圖處理404和500錯誤在ASP.NET MVC 6ASP.NET核心 - 處理404和500錯誤

  1. 我有行動的控制器,它渲染頁面錯誤狀態和說明:

    [HttpGet] 
    [Route("/Errors/{status}")] 
    public IActionResult Errors(int status) 
    { 
        var model = Mapper.Map<ErrorViewModel>(BaseData); 
        model.ErrorCode = status; 
    
        if (error_descriptions.ContainsKey(status)) 
         model.Description = error_descriptions[status]; 
        else 
         model.Description = "Неизвестная ошибка"; 
    
        return View(model); 
    } 
    
  2. 啓用狀態代碼頁和異常處理程序:

    app.UseExceptionHandler( 「/錯誤/ 500」); app.UseStatusCodePagesWithReExecute(「/ Errors/{0}」);

我想GER 404錯誤,當網址不符合任何路線,當queryes到數據庫返回空sequencies(訪問nonexists元素)。

當LINQ返回空序列時(the sequence contains no elements),我得到了InvalidOperationException。我想處理全局異常,在這種情況下顯示404,在其他情況下顯示500

  • 我做一個簡單的過濾器,並在OnException檢查異常:

    public void OnException(ExceptionContext context) 
    { 
        logger.LogError(context.Exception.Message); 
    
        if (context.Exception is System.InvalidOperationException) ; 
         //NEED TO CALL HomeController.Error(404) 
    } 
    
  • 它的工作原理,但我不知道該怎麼稱呼我的行動並顯示錯誤頁面

    +2

    您不應該依賴例外來轉到404頁面。拋出異常很昂貴。例如,您最好使用'SingleOrDefault()',然後檢查返回值是否爲'null'。 – DavidG

    +0

    謝謝,現在我認爲這樣 –

    回答

    1

    您可以創建一個像

    OnException方法的模型
    +0

    'override'會出錯,但是如果沒有它,它會很好地工作。 –