Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException
вообще.
См. также: A хороший список лучших практик
Я бы добавил, очень важно, хорошо использовать модификатор final
. Использование "окончательной" модификатор, когда это применимо в Java
Сводка:
final
для обеспечения хорошей инициализации. @NotNull
и @Nullable
if("knownObject".equals(unknownObject)
valueOf()
поверх toString (). StringUtils
StringUtils.isEmpty(null)
. [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 об этом.
Вы пропускаете Error.aspx:) В предварительном просмотре 5, это расположено в Ваших Представлениях/Совместно используемой папке. Просто скопируйте его с нового Предварительного просмотра 5 проектов.
Следует также отметить, что ошибки, которые не устанавливают код ошибки http на 500
(например, UnauthorizedAccessException)
, не будут обрабатываться фильтром HandleError.
Решение для кода ошибки 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
{
}