[英]How to handle exceptions in HTTPHandler?
我有使用HTML和asp.net HTTP处理程序的邮件发送程序。
这是我的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("abc@ymail.com");
msgobj.Subject = "Its From Guest";
msgobj.Body = emailcontent;
msgobj.IsBodyHtml = true;
msgobj.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;
serverobj.Send(msgobj);
}
现在如何处理该处理程序的响应。
如果电子邮件发送成功,如何将成功消息反映到同一HTML页面?
如果出现任何异常,该如何处理该异常或异常消息?
您可以使用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.");
}
我知道这是一个很老的问题,但是它仍然没有一个公认的答案,更不用说我认为最适合这种情况的答案了。 OP声明的表单的目的是仅基于来自HTML表单的输入来发送电子邮件,并适当地提供成功/失败消息。 对于ASP.NET HTTP处理程序,这是不合适的情况。 我知道,HTTP处理程序不会给您带来任何好处,只需通过POST回Web表单即可。 但是,在Web表单中使用回发处理程序将使您轻松执行以下操作:
例如,您可能具有通常不可见的ASP.NET Panel控件,但是当您在验证表单或发送电子邮件时遇到错误时,可以在此处显示错误消息。 如果您尝试使用HTTP处理程序来执行此操作,则您要么要做太多繁重的工作,要么将错误消息注入到同一页面或另一页中,要么将非常纯净的纯文本消息发送给客户端。
如果您必须使用HTTP处理程序,我建议您使用Karl Anderson的答案 , 并至少在需要理解该错误的HTTP状态代码中设置context.Response.StatusCode
。 答案是正确的,如果SendEmail()
方法引发异常,则HTTP处理程序会将错误消息以HTTP 200(OK)的形式发送回客户端,如果存在异常并且无法发送电子邮件,则该消息是不正确的。 我尚未测试此方法(使用context.Response.Write()
),但我确实相信您最终会将非常基本的文本输出到浏览器,作为对提交表单后POST请求的响应。 不会有任何HTML,具体取决于您的应用程序配置为处理HTTP错误的方式。 如果您具有用于HTTP 500的自定义错误处理程序,并且已将catch
块配置为将StatusCode
设置为500,则必须配置该自定义处理程序页面以读取响应消息,以便将该消息注入到您的自定义处理程序页面内容中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.