Обработка всех ошибок
Добрый день всем! Пытаюсь решить проблему. Я использую метод, который обрабатывает все ошибки на сайте (этот метод найден в блоге одного человека)
Global.asax
protected void Application_Error(object sender, EventArgs e)
{
HttpContext ctx = HttpContext.Current;
Exception ex = ctx.Server.GetLastError();
ctx.Response.Clear();
RequestContext rc = ((MvcHandler)ctx.CurrentHandler).RequestContext;
IController controller = new CategoryController();
var context = new ControllerContext(rc, (ControllerBase)controller);
var viewResult = new ViewResult();
var httpException = ex as HttpException;
if (httpException != null)
{
switch (httpException.GetHttpCode())
{
case 404:
viewResult.ViewName = "Error404";
break;
case 500:
viewResult.ViewName = "Error500";
break;
default:
viewResult.ViewName = "Error";
break;
}
}
else
{
viewResult.ViewName = "Error";
}
viewResult.ViewData.Model = new HandleErrorInfo(ex, context.RouteData.GetRequiredString("controller"), context.RouteData.GetRequiredString("action"));
viewResult.ExecuteResult(context);
ctx.Server.ClearError();
}
Когда я запускаю Проекты в студии, вызываю ошибку. Я получаю исключение в этом коде:
RequestContext rc = ((MvcHandler)ctx.CurrentHandler).RequestContext;
Исключение:
Невозможно привести объект типа '
System.Web.DefaultHttpHandler
' печатать 'System.Web.Mvc.MvcHandler
'
Как только я прекращаю отладку (Shift + F5). Этот метод работает хорошо и обрабатывает любые ошибки. Но в начале проекта, вызывая ошибку. Ищите решение этих тем, но эта проблема не найдена. Помогите, пожалуйста.
[HandleError]
public class CategoryController : Controller
{
// some methods
}
1 ответ
Решение
Решил его проблему с помощью кода:
void Application_Error(object sender, EventArgs e)
{
Exception ex = Server.GetLastError();
if (ex is HttpException && ((HttpException)ex).GetHttpCode() == 404)
{
Response.Redirect("~/Error/404");
}
else
{
Response.Redirect("~/Error/Other");
}
Server.ClearError();
}