ASP.NET пользовательская ошибочная страница - Сервер. GetLastError () является пустым

Нет простого способа выполнить множественное наследование класса. Я следую комбинации ассоциации и наследования для достижения такого поведения.

    class Person {
        constructor(firstname, lastname, age){
            this.firstname = firstname,
            this.lastname = lastname
            this.Age = age
        }

        fullname(){
                return this.firstname +" " + this.lastname;
            } 
    }

    class Organization {
        constructor(orgname){
            this.orgname = orgname;
        }
    }

    class Employee extends Person{
        constructor(firstname, lastname, age,id) {
            super(firstname, lastname, age);
            this.id = id;
        }

    }
    var emp = new Employee("John", "Doe", 33,12345);
    Object.assign(emp, new Organization("Innovate"));
    console.log(emp.id);
    console.log(emp.orgname);
    console.log(emp.fullname());

Надеюсь, что это будет полезно.

111
задан nailitdown 5 December 2008 в 05:57
поделиться

6 ответов

Смотря более тесно на мой настроенный web.config, один из комментариев в это сообщение очень полезно

в asp.net 3,5 sp1, там новый параметр redirectMode

, Таким образом, мы можем исправить customErrors для добавления этого параметра:

<customErrors mode="RemoteOnly" defaultRedirect="~/errors/GeneralError.aspx" redirectMode="ResponseRewrite" />

ResponseRewrite режим позволяет нам загружать В «Ошибка PageВ», не перенаправляя браузер, таким образом, URL остается таким же, и значительно для меня, информация об исключении не потеряна.

136
ответ дан Sergey Brunov 5 November 2019 в 09:50
поделиться

Хорошо, я нашел это сообщение: http://msdn.microsoft.com/en-us/library/aa479319.aspx

с этой очень иллюстративной схемой:

схема http://i.msdn.microsoft.com/Aa479319.customerrors_01 (en-us, MSDN 10) .gif

в сущности, для достигания тех, которые детализирует исключение, я должен сохранить их сам в Global.asax для более позднего извлечения на моей пользовательской ошибочной странице.

кажется, что лучший способ состоит в том, чтобы сделать объем работы в Global.asax с пользовательскими ошибочными страницами, обрабатывающими полезное содержание, а не логику.

37
ответ дан Glorfindel 5 November 2019 в 09:50
поделиться

Я думаю, что у Вас есть несколько опций здесь.

Вы могли сохранить последнее Исключение на Сессии и получить его от Вашей пользовательской ошибочной страницы; или Вы могли просто перенаправить к своей пользовательской ошибочной странице в событии Application_error. При выборе последнего Вы хотите удостовериться, что Вы используете Сервер. Метод передачи.

1
ответ дан Victor 5 November 2019 в 09:50
поделиться

Комбинация того, что заявили NailItDown и Victor. Предпочтительный/самый легкий путь состоит в том, чтобы использовать Ваше Глобальное. Asax, чтобы сохранить ошибку и затем перенаправить к Вашей пользовательской ошибочной странице.

Global.asax:

    void Application_Error(object sender, EventArgs e) 
{
    // Code that runs when an unhandled error occurs
    Exception ex = Server.GetLastError();
    Application["TheException"] = ex; //store the error for later
    Server.ClearError(); //clear the error so we can continue onwards
    Response.Redirect("~/myErrorPage.aspx"); //direct user to error page
}

, Кроме того, необходимо настроить Ваш web.config:

  <system.web>
    <customErrors mode="RemoteOnly" defaultRedirect="~/myErrorPage.aspx">
    </customErrors>
  </system.web>

И наконец, сделайте то, что Вы должны за исключением, которое Вы сохранили в Вашем ошибочная страница :

protected void Page_Load(object sender, EventArgs e)
{

    // ... do stuff ...
    //we caught an exception in our Global.asax, do stuff with it.
    Exception caughtException = (Exception)Application["TheException"];
    //... do stuff ...
}
18
ответ дан Paul Fleming 5 November 2019 в 09:50
поделиться

Попробуйте использовать что-то вроде Server.Transfer ("~ / ErrorPage.aspx"); из метода Application_Error () global.asax .cs

Тогда из Page_Load () ErrorPage.aspx.cs вы можете сделать что-то вроде: Exception exception = Server.GetLastError (). GetBaseException ();

Server.Transfer () , кажется, сохраняет исключение вокруг.

6
ответ дан 24 November 2019 в 03:01
поделиться

Одно важное соображение, которое, я думаю, всем здесь отсутствует сценарий балансировки нагрузки (веб-ферма). Поскольку сервер, на котором выполняется global.asax, может отличаться от сервера, на котором выполняется пользовательская страница ошибки, сохранение объекта исключения в Application ненадежно.

Я все еще ищу надежное решение этой проблемы в конфигурации веб-фермы и / или хорошее объяснение от MS, почему вы просто не можете получить исключение с помощью Server.GetLastError на странице настраиваемой ошибки. как вы можете в global.asax Application_Error.

P.S. Небезопасно хранить данные в коллекции Application без предварительной блокировки, а затем разблокировки.

4
ответ дан 24 November 2019 в 03:01
поделиться
Другие вопросы по тегам:

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