ASP.NET MVC HandleError

Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException вообще.

См. также: A хороший список лучших практик

Я бы добавил, очень важно, хорошо использовать модификатор final. Использование "окончательной" модификатор, когда это применимо в Java

Сводка:

  1. Используйте модификатор final для обеспечения хорошей инициализации.
  2. Избегайте возврата null в методы, например, при возврате пустых коллекций.
  3. Использовать аннотации @NotNull и @Nullable
  4. Быстрое завершение работы и использование утверждений, чтобы избежать распространения нулевых объектов через все приложение, когда они не должен быть пустым.
  5. Сначала используйте значения с известным объектом: if("knownObject".equals(unknownObject)
  6. Предпочитают valueOf() поверх toString ().
  7. Используйте null safe StringUtils StringUtils.isEmpty(null).

109
задан abatishchev 12 August 2010 в 07:25
поделиться

4 ответа

[HandleError]

, Когда Вы обеспечиваете только HandleError, приписывают Вашему классу (или Вашему методу действия в этом отношении), тогда когда необработанное исключение произойдет, MVC будет искать соответствующее Представление под названием "Ошибка" сначала в папке Controller's View. Если это не может найти его там тогда, это продолжит смотреть в папке Shared View (который должен иметь файл Error.aspx в нем по умолчанию)

[HandleError(ExceptionType = typeof(SqlException), View = "DatabaseError")]
[HandleError(ExceptionType = typeof(NullReferenceException), View = "LameErrorHandling")]

, можно также сложить дополнительные атрибуты с определенной информацией о типе исключения, которое Вы ищете. В той точке можно направить Ошибку к определенному представлению кроме представления "Error" по умолчанию.

Для получения дополнительной информации, смотрите на сообщение в блоге Scott Guthrie об этом.

156
ответ дан radbyx 24 November 2019 в 03:22
поделиться

Вы пропускаете Error.aspx:) В предварительном просмотре 5, это расположено в Ваших Представлениях/Совместно используемой папке. Просто скопируйте его с нового Предварительного просмотра 5 проектов.

4
ответ дан Ricky 24 November 2019 в 03:22
поделиться

Следует также отметить, что ошибки, которые не устанавливают код ошибки http на 500

(например, UnauthorizedAccessException)

, не будут обрабатываться фильтром HandleError.

23
ответ дан 24 November 2019 в 03:22
поделиться

Решение для кода ошибки http на 500 это атрибут с именем [ERROR], поместите его в действие

public class Error: System.Web.Mvc.HandleErrorAttribute
{
    public override void OnException(System.Web.Mvc.ExceptionContext filterContext)
    {

            if (filterContext.HttpContext.IsCustomErrorEnabled)
            {
                filterContext.ExceptionHandled = true;

            }
            base.OnException(filterContext);
            //OVERRIDE THE 500 ERROR  
           filterContext.HttpContext.Response.StatusCode = 200;
    }

    private static void RaiseErrorSignal(Exception e)
    {
        var context = HttpContext.Current;
      // using.Elmah.ErrorSignal.FromContext(context).Raise(e, context);
    } 

}

// ПРИМЕР :

[Error]
[HandleError]
[PopulateSiteMap(SiteMapName="Mifel1", ViewDataKey="Mifel1")]
public class ApplicationController : Controller
{
}
14
ответ дан 24 November 2019 в 03:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: