Как отловить необработанные ошибки в ASP.NET MVC? - PullRequest
0 голосов
/ 31 января 2019

Я создал простой проект MVC, добавив один метод:

public class HomeController : Controller
{
    public async Task<string> Index()
    {
        var t = Task.Run(() =>
        {
            Debug.Print("Debug___1");
            throw new Exception("Error #1");
            Debug.Print("Debug___2");
        });
        await Task.Delay(5000);
        return "ASD";
    }
}

Затем я запускаю приложение, получаю вывод "ASD" и отлаживаю сообщения:

Debug___1
Exception thrown: 'System.Exception' in WebApplication2.dll

Но какя могу поймать это исключение?Я пытался создать метод Application_Error в global.asas, но он не работал:

namespace WebApplication2
{
    public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }

        protected void Application_Error(object sender, EventArgs e)
        {
            Debug.Print("Catched");
        }
    }
}

Ответы [ 3 ]

0 голосов
/ 31 января 2019
catch(Exception ex)
{
 //create custom error handling method
 ErrorLog(ex);
}

Public static void Errorlog(Exception ex)
{
//creates new txt file to view errordetails
 string strPath = @"D:\ErrorLog.txt";
 File.create(strPath);
 using (StreamWriter sw = File.AppendText(strPath))
 {
   sw.WriteLine("Error Details",+DateTime.Now);
   sw.WriteLine("Error Message: " + ex.Message);
   sw.WriteLine("Stack Trace: " + ex.StackTrace);
 }
}
0 голосов
/ 01 февраля 2019

.NET 4 позволяет вам определить, как ваша задача будет обрабатывать исключения, как показано в следующем сообщении: перехватывать исключение, которое выдается в другом потоке

Итак, в приведенном выше примере высначала определит вашу задачу

Task<string> task = new Task<string>(Test);

, затем передаст обработчик исключения

task.ContinueWith(ExceptionHandler, TaskContinuationOptions.OnlyOnFaulted);

, а затем определит где-нибудь обработчик исключения

static void ExceptionHandler(Task<string> task)
{
    var exception = task.Exception;
    //Handle error via ModelState or how you prefer 
}
0 голосов
/ 31 января 2019

На уровне контроллера вы можете иметь дело с необработанными исключениями, переопределив метод OnException.

Просмотрите эту ссылку для описания: https://www.codeproject.com/Articles/850062/Exception-handling-in-ASP-NET-MVC-methods-explaine

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...