Какова стратегия обработки необработанных исключений в приложениях asp.net mvc? - PullRequest
3 голосов
/ 01 февраля 2009

Я хотел бы знать некоторые стратегии / практики, с которыми вы сталкиваетесь при обработке необработанных исключений в ASP.NET MVC.

Короче говоря, я хочу избегать желтого экрана всякий раз, когда происходит какая-либо ошибка, и показывать посетителю сообщение об ошибке, соответствующей ошибке.

Я имею в виду, вы пишете контроллер для этого, который показывает соответствующую страницу ошибки, или вы идете другим путем, например, пишете httpmodule и перехватывает ошибку на глобальном уровне.

Любые входы в этом направлении приветствуются.

Ответы [ 3 ]

7 голосов
/ 12 февраля 2009

Использование атрибута HandleError - это путь. Вот небольшой пример, который я использую для обработки вызовов Ajax из JQuery, ExtJs и других.

На вашем контроллере

public class DataController : Controller
{    
    [HandleError(ExceptionType = typeof(ArgumentException), View = "ErrorAjax")]
    public void Foo(string x, string y)
    {    
        if (String.IsNullorEmpty(x))
            throw new ArgumentException("String cannot be empty!");

            // Call your layers or whatever here
            AnotherCall();
    }
}

Тогда на ваш взгляд (ErrorAjax). Обратите внимание, что он строго типизирован (HandleErrorInfo)

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<HandleErrorInfo>" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Sorry Dude!</title>
</head>
<body>
    <div>
        <!-- be creative here-->
        Sorry, an error occurred while processing your request.
        Action = <%= ViewData.Model.ActionName %>
        Controller = <%= ViewData.Model.ControllerName %>
        Message = <%= ViewData.Model.Exception.Message %>

    </div>
</body>
</html>

Пара гуч

  1. Проверьте ваш web.config и убедитесь, что customErrors mode = "On"
  2. Для начала создайте представление в общей папке
4 голосов
/ 01 февраля 2009

Не используйте статью по обработке исключений, на которую вы ссылались. Это старая статья, в которой у них не было атрибута HandleError, добавленного в платформу. Используйте атрибут HandleError . Добавлено в превью 4.

4 голосов
/ 01 февраля 2009

Попробуйте атрибут HandleError .

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