SvetlyiAkaPro
@SvetlyiAkaPro

Обработка ошибок в Asp.net MVC?

Есть такой обработчик ошибок в Global.asax.cs
protected void Application_Error(object sender, EventArgs e)
{
	Exception exception = Server.GetLastError();
	Response.Clear();

	HttpException httpException = exception as HttpException;

	if (httpException != null)
	{
		string action;

		switch (httpException.GetHttpCode())
		{
			case 404:
				// page not found
				action = "HttpError";
				break;
			default:
				action = "HttpError";
				break;
		}
		Session["error"]=exception.Message;
		// clear error on server
		Server.ClearError();

		Response.Redirect(String.Format("~/Home/HttpError/?message={0}", exception.Message));
	}
}

После вызова 404 ошибки в любом месте
throw new HttpException(404, "not found");
Выполнение прерывается с сообщением, что возникла ошибка. Когда тыкаю Continue появляется моя страница ошибки и все нормально. Если же просто ввести левый адрес, то все нормально перехватывается, возникает моя страница ошибки.
Как быть? Почему ошибка нормально не перехватывается?
  • Вопрос задан
  • 4290 просмотров
Решения вопроса 1
FirstX
@FirstX
.net developer
Когда тыкаю Continue появляется моя страница ошибки и все нормально.


все нормально перехватывается, возникает моя страница ошибки.


Почему ошибка нормально не перехватывается?


В обоих случаях у вас все нормально, но в вопросе уже что-то не нормально. Возможно не совсем корректно сформулировано условие проблемы.

Возможно Вы имеете в виду, что при явном вбросе исключения - студия вываливает вас в код, а потом только показывает страницу с ошибкой, а при неправильно указанном пути - сразу показывается страница с ошибкой. Точки останова в методе-обработчике нет?

Если все так, то все просто: в первом случае вы явно вбрасываете исключение в собственной реализации контроллера, то есть у вас есть доступ к коду, где оно вывалилось. Во-втором случае этим занимаются грубо говоря скомпилированные DLLки движка, к коду которых в студии доступа вы не имеете и поэтому исключение там внутри сразу уходит в глобальный обработчик.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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