2013-09-12 5 views
2

У меня есть программа отправки почты с использованием HTML и обработчика HTTP asp.net.Как обрабатывать исключения в HTTPHandler?

Вот мой HTML-страница, которая отправляет запрос на .ashx страница

<html> 
<form id="ContactForm" action="EmailHandler.ashx" method="post"> 
    Name: <input class="input" type="text" id="contactname" name="contactname" autocomplete="on" required/> 
    Email <input class="input" type="email" id="contactemail" name="contactemail" autocomplete="on" required /> 
    Comments<textarea cols="50" rows="5" id="contactmessage" name="contactmessage" required></textarea> 

    <input type="submit" id="emailsubmit" name="emailsubmit" value="Send" /> 
</form> 
</html> 

вот мой HttpHandler (EmailHandler.ashx)

public class EmailHandler : IHttpHandler { 

    public void ProcessRequest (HttpContext context) { 
     context.Response.ContentType = "text/plain"; 
     //context.Response.Write("Hello World"); 
     string name = context.Request.Form["contactname"]; 
     string email = context.Request.Form["contactemail"]; 
     string content = context.Request.Form["contactmessage"]; 
     try 
     { 
      SendEmail(name, email, content); 

     } 
     catch (Exception) 
     { 
      ******* 
     } 
    } 

    public bool IsReusable { get { return false; } } 

    public void SendEmail(string name, string emailid, string emailcontent) 
    { 
     SmtpClient serverobj = new SmtpClient(); 
     MailMessage msgobj = new MailMessage(); 

     msgobj.To.Add("[email protected]"); 
     msgobj.Subject = "Its From Guest"; 
     msgobj.Body = emailcontent; 
     msgobj.IsBodyHtml = true; 
     msgobj.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure; 
     serverobj.Send(msgobj); 

    } 

Теперь, как обрабатывать ответ от этого обработчика.

  1. Если письмо успешно отправлено, как отразить сообщение об успешном завершении на той же странице html?

  2. Если возникает какое-либо исключение, как обрабатывать сообщение об исключении или исключении?

+0

Просмотрите класс HttpContext (http://msdn.microsoft.com/en-us/library/system.web.httpcontext.aspx) и посмотрите, нет ли каких-либо полезных мест для размещения вашего сообщения об ошибке/ошибке , –

ответ

1

Вы можете использовать context записать значения непосредственно обратно на страницу вызова, например:

public void ProcessRequest (HttpContext context) { 
    context.Response.ContentType = "text/plain"; 
    //context.Response.Write("Hello World"); 
    string name = context.Request.Form["contactname"]; 
    string email = context.Request.Form["contactemail"]; 
    string content = context.Request.Form["contactmessage"]; 
    try 
    { 
     SendEmail(name, email, content); 
    } 
    catch (Exception ex) 
    { 
     // Write exception message to user 
     // You can include some of the exception detail via the ex object, 
     // but be careful how much information you divulge to the user 
     context.Response.Write("There was a problem sending the email."); 
    } 

    // Email was sent successfully 
    context.Response.Write("Email sent successfully."); 
} 
+0

Он печатает результат только на странице .ashx. Я пытаюсь привести ответ на одну и ту же страницу html или другую страницу html –

0

Я знаю, что это довольно старый вопрос, но он до сих пор сидит без принятого ответа, тем более с ответом, который, как мне кажется, наиболее соответствует ситуации. Цель формы, которую заявила OP, заключается в том, чтобы просто отправить электронное письмо на основе ввода из HTML-формы, предоставив сообщения об успешном завершении или сбое. Это не является подходящей ситуацией для обработчика HTTP ASP.NET. Мне неизвестно, что HTTP-обработчик даст вам просто POST'ing обратно в веб-форму. Однако, используя обработчик обратной передачи в веб-форме позволит вам легко делать такие вещи, как:

  1. Перенаправление на успех
  2. Показать сообщение на успех
  3. отображать сообщение, с подробной информацией, по ошибке
  4. Redirect, без подробностей, по ошибке

Например, вы могли бы иметь контроль ASP.NET панель, которая обычно не видна, но при возникновении ошибки проверки достоверности формы или отправки по электронной почте, вам может отображать сообщения об ошибках. Если вы попытаетесь сделать это с помощью обработчика HTTP, вам придется либо сделать слишком много тяжелой работы, вводя сообщение об ошибке на ту же или другую страницу, либо у вас есть очень мягкое текстовое сообщение для отправки клиенту.

Если ДОЛЖНЫ использовать обработчик HTTP, я бы посоветовал использовать Карл Андерсон answer с добавлением установки по крайней мереcontext.Response.StatusCode в код состояния HTTP, который имеет смысл для ошибки. Как следует из ответа, если исключение выбрано методом SendEmail(), обработчик HTTP отправит сообщение об ошибке обратно клиенту в виде HTTP 200 (OK), что является неправильным, если возникло исключение, и письмо не могло быть отправлено. Я не тестировал этот метод (используя context.Response.Write()), но я верю, что вы просто получите очень простой текстовый вывод в браузере в ответ на запрос POST, полученный в результате отправки формы. Не было бы никакого HTML, в зависимости от того, как ваше приложение настроено для обработки ошибок HTTP.Если у вас есть собственный обработчик ошибок для HTTP 500, и вы сконфигурировали блок catch для установки StatusCode на 500, вам нужно будет настроить эту страницу пользовательского обработчика для чтения ответного сообщения, чтобы вставить это сообщение в ваше содержимое страницы пользовательского обработчика ,

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