Обработка всех ошибок

Добрый день всем! Пытаюсь решить проблему. Я использую метод, который обрабатывает все ошибки на сайте (этот метод найден в блоге одного человека)

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();
        }
Другие вопросы по тегам