Доступ к DOM из application_error

У меня есть собственный обработчик ошибок для сайта asp.net.

void Application_Error(object sender, EventArgs e)
{
    // Code that runs when an unhandled error occurs
    //if (System.Configuration.ConfigurationManager.AppSettings["ProductionMode"] == "Yes")
    #if (!DEBUG)
    Server.Transfer("~\\GlobalExceptionHandler.aspx");
    #endif
}

Он отлично работает при получении информации об исключении, потому что он просто зацепит Server.getLastException() и отправит мне по электронной почте для проверки.

Однако у меня есть несколько текстовых полей на странице, и я хотел бы отправить значение этих текстовых полей вместе с электронным письмом. Может быть, это не совсем DOM, к которому я ищу доступ, а вместо этого опубликованные переменные.

Я попытался посмотреть на HttpContext.Current.Request.Form, но он не показал ключей.

Итак, кто-нибудь знает, как получить доступ к значениям формы при глобальном перехвате исключения?


person Cheruvian    schedule 29.07.2014    source источник


Ответы (1)


Доступ к значениям формы

Чтобы получить доступ к значениям формы в Global.Application_Error, вы можете просто использовать HttpContext.Current.Request.Form.

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

void Application_Error(object sender, EventArgs e)
{
    var test = HttpContext.Current.Request.Form;
}

Установив точку останова в назначении на test, а затем перешагнув через нее (с помощью F10), когда она будет достигнута, вы увидите, что test действительно установлен на коллекцию значений формы post(back).

Доступ к значениям управления обратной передачей

Кроме того, вы можете получить доступ к значениям управления обратной передачей, добавив их в сеанс обратной передачи, например...

// ************code behind
protected void TextBox1_TextChanged(object sender, EventArgs e)
{
    Session["TextBox1"] = TextBox1.Text;
}

... и доступ к сеансу в обработчике ошибок приложения, например:

// ************Global.asax.cs
protected void Application_Error(object sender, EventArgs e)
{
    // Use Session["TextBox1"].
}

поток CodeVerge хорошо говорит о приближении - особенно ответ Бенсона Ю.

person J0e3gan    schedule 30.07.2014
comment
Как уже говорилось, я уже пытался использовать переменную запроса, но форма становится пустой. Я попытался сохранить форму в сеансе (я проанализировал все ключи/значения в строку) Переменная, но когда я попытался получить доступ к сеансу, он выдал исключение HTTP. - person Cheruvian; 30.07.2014
comment
@Cheruvian: есть место, где можно испортить проверку коллекции значений формы запроса в Global.asax.cs: так что дважды проверьте, что вы, на самом деле, делая это правильно. Сказав это, обязательно отредактируйте свой вопрос, чтобы объяснить, как вы пытались добавить контрольные значения в сеанс и использовать сеанс в Application_Error и исключение, которое возникло. Эти детали существенно влияют на вопросы, которые вы задаете: поэтому важно, чтобы ваш вопрос включал их. - person J0e3gan; 30.07.2014