[英]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.