2011-01-30 7 views
9

Я пробовал все, даже удаляя asp.net mvc3, и я не могу заставить работать глобальный фильтр HandleError.asp.net mvc 3 handleerror глобальный фильтр всегда показывает статус IIS 500 страница

Я настроил фильтр HandleError в Global.asax:

public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
{ 
    filters.Add(new HandleErrorAttribute()); 
} 

Также у меня включено CustomErrors (это не имеет значения, если я установить defaultRedirect = «Ошибка» или нет, я думаю, что в Документах, потому что необходимо для более старых версий MVC):

<customErrors mode="On" /> 

Попытка перемещаться по странице, пока ошибка становится поднятым, кастрированный баран вы делаете с локального хоста или используя имя хоста, внутри сервера разработки или IIS 7.5, его всегда перенаправляет на стандартную страницу статуса 500, вместо моей cust om Error.cshtml, которое я создал в Shared. Вот мнение Код ошибки:

@model System.Web.Mvc.HandleErrorInfo 

@{ 
    ViewBag.Title = "Oooops"; 
} 

<h2>Ooops Something really bad happened!</h2> 

Кроме того, я заметил, что если я создаю новый проект ASP.NET MVC3, а затем выберите «Internet Application» шаблон и просто позволяющие CustomErrors в этом проекте, а затем начнется HandleError фильтр работая просто отлично, однако использование пустого шаблона MVC3 не делает.


Я хочу пояснить, что на самом деле я могу видеть представление об ошибке время обработки при отладке, однако браузер всегда отображать Error 500 страницы.

+0

Я не думаю, что так, как я сказал, что это не работает на сервере разработки либо –

ответ

8

Я столкнулся с этой проблемой. Я нашел этот пост: 500 Internal Server Error in ASP.NET MVC и попытался снять флажок «Friendly Http Errors», и мой атрибут HandleErrors начал работать, как ожидалось, в IE 8 с включенным режимом совместимости IE 7 (и начал работать так же, как в Chrome по умолчанию).Я не думаю, что это верное решение для развернутого приложения, но, возможно, есть способ расширить атрибут HandleError, чтобы он перенаправлялся на контроллер «Ошибка», а не только по умолчанию.

UPDATE: This post показывает, что при возврате HTTP-статуса 500 IE обрабатывает его неловко. Способ обойти это, чтобы установить статус на 200, тогда все работает нормально (даже в IE).

public class CustomHandleErrorAttribute : HandleErrorAttribute 
{ 
    public override void OnException(ExceptionContext filterContext) 
    {  
     base.OnException(filterContext); 

     //https://stackoverflow.com/questions/5137627/mvc-handleerror-returns-error-500-and-view-error-page 
     //https://stackoverflow.com/questions/183316/asp-net-mvc-handleerror 
     filterContext.HttpContext.Response.StatusCode = 200; 
    } 
} 
1

Вот шаги, которые я использовал и которые работали для меня:

  1. Создать новый ASP.NET MVC 3 проект с использованием шаблона Пустого
  2. Добавить новый контроллер под названием HomeController со следующим содержанию (вам не нужен какой-либо вид => мы бросаем исключение в любом случае):

    public class HomeController : Controller 
    { 
        public ActionResult Index() 
        { 
         throw new Exception("error"); 
        } 
    } 
    
  3. Включите пользовательские ошибки на web.config, добавив следующий раздел:

    <customErrors mode="On"> 
    </customErrors> 
    
  4. Запустить сайт и сформировать изображение ~/Views/Shared/Error.cshtml, которое было создано по шаблону.

+0

я попробую еще раз, когда я возвращаюсь домой, однако те шаги, которые я выполнил –

+0

Я воспроизвел именно эти шаги, и я получаю только http-статус 500 страницы –

+0

@iCe, вы используете это на Cassini? Также проверьте в EventLog вашего аппарата. Возможно, есть еще одна проблема, с которой вы сталкиваетесь. –

6

Ну это hilarous, наконец, нашел ответ, эта машина имеет Internet Explorer 9 беты установлена ​​и разница в поведении при обращении статуса 500, что HandleError атрибута устанавливает перед показом вида ошибки.

Я попытался с другими браузерами и работает отлично: Chrome vs IE 9 Beta

То, что я не могу undestarnd теперь почему шаблон «Интернет Appication» работает, хотя.

Кто-нибудь знает, где я могу отправить сообщение об ошибке? Должен ли он перейти к команде asp.net mvc или команде IE 9? Как мне связаться с ними?

+0

Ничего себе. Приятно найти, я не знаю, сколько времени я бы искал, если бы я не нашел ваш ответ: D – Shtong

0

Думаю, я нашел способ обойти это. Замените ваши файлы Error.cshtml и _Layout.cshtml теми, которые были созданы из шаблонов Интернета или интрасети.

4

Обнаружена проблема - страница с ошибкой - убедитесь, что вы поместили некоторый фиктивный контент - чтобы размер содержимого был по крайней мере 1 КБ.

Вот содержание Error.cshtml

<!DOCTYPE html> 
<html> 
<head> 
    <title>Error</title> 
</head> 
<body> 
    <h2> 
     Sorry, an error occurred while processing your request. @DateTime.Now 
    </h2> 
    <div> 
    .......................................................................... 
    .......................................................................... 
    .......................................................................... 
    .......................................................................... 
    .......................................................................... 
    .......................................................................... 
    .......................................................................... 
    .......................................................................... 
    .......................................................................... 
    .......................................................................... 
    .......................................................................... 
    </div> 
</body> 
</html> 
+0

Отлично, спасибо! Weird! – Matsen75

+0

@Bavarious 6 лет спустя, я испытываю эту проблему, и содержимое моего Error.cshtml уже на 1 КБ, но я до сих пор не могу решить эту очень неприятную проблему. –

18

Чтобы исправить это все, что вам нужно сделать, это изменить свою страницу Error.cshtml и убедитесь, что вы установили свойство Layout правильно. В приложении Empty MVC 3 установлено значение NULL, что вызывает ошибку внутреннего сервера HTTP 500.

Я исправил эту проблему, просто добавив:

@{ Layout = "~/Views/Shared/_Layout.cshtml"; }

+2

Это сообщение недооценено. +1 СПАСИБО !!! – automagic

+0

Действительно! Это сообщение решило мою проблему !! +1 от меня! –

+0

Это действительно решило мою проблему. Пустое интернет-приложение -> Не определен макет. Хорошее место! – Junto

Смежные вопросы