Application_Error ไม่เริ่มทำงานเมื่อ customerrors =“ On”


124

ฉันมีรหัสในเหตุการณ์global.asaxของไฟล์Application_Errorซึ่งดำเนินการเมื่อมีข้อผิดพลาดเกิดขึ้นและส่งอีเมลรายละเอียดข้อผิดพลาดให้ตัวเอง

void Application_Error(object sender, EventArgs e)
{
    var error = Server.GetLastError();

    if (error.Message != "Not Found")
    {
        // Send email here...
    }

}

สิ่งนี้ใช้ได้ดีเมื่อฉันเรียกใช้ใน Visual Studio อย่างไรก็ตามเมื่อฉันเผยแพร่ไปยังเซิร์ฟเวอร์สดของเราApplication_Errorเหตุการณ์จะไม่เริ่มทำงาน

หลังจากการทดสอบบางครั้งฉันสามารถทำการApplication_Errorยิงได้เมื่อฉันตั้งค่าcustomErrors="Off"อย่างไรก็ตามการตั้งค่ากลับเพื่อcustomErrors="On"หยุดเหตุการณ์ไม่ให้เกิดขึ้นอีกครั้ง

ใครช่วยแนะนำว่าทำไมถึงApplication_Errorไม่ยิงเมื่อcustomErrorsเปิดใช้งานในweb.config?


ฉันมีปัญหาเดียวกัน ฉันยังพบคำถาม SO นี้: stackoverflow.com/questions/3713939/…ซึ่งแนะนำให้ใส่เซิร์ฟเวอร์ IIS7 เข้าสู่โหมดคลาสสิก น่าเสียดายที่ไม่ใช่ตัวเลือกสำหรับเรา ใครมีวิธีแก้ไขที่ดีกว่านี้
Jesse Webb

นี่คืออีกคำถามที่เกี่ยวข้องและเป็นคำตอบ (ไม่ยอมรับข้อใด) แนะนำว่าอย่าใช้ Application_Error () เลย ... stackoverflow.com/questions/1194578/…
Jesse Webb

@Gweebz ฉันได้โพสต์คำตอบเกี่ยวกับวิธีที่ฉันได้รับจากสิ่งนี้ แต่ฉันยังไม่พบเอกสารที่ชัดเจนว่าทำไมฉันถึงได้รับพฤติกรรมนี้
WDuffy

ฉันได้เพิ่มคำตอบซึ่งอธิบายว่าเหตุใดจึงApplication_Error()ไม่มีการเรียกใช้เมธอด ฉันยังอธิบายวิธีแก้ปัญหาสุดท้ายของฉันด้วย
Jesse Webb

แนะนำบทความนี้จริงๆเพื่อให้ข้อผิดพลาดที่กำหนดเองทำงานได้
ThomasArdal

คำตอบ:


133

อัปเดต
เนื่องจากคำตอบนี้มีวิธีแก้ปัญหาฉันจะไม่แก้ไข แต่ฉันพบวิธีที่สะอาดกว่ามากในการแก้ปัญหานี้ ดูคำตอบอื่น ๆ ของฉันสำหรับรายละเอียด ...

คำตอบเดิม:
ฉันคิดว่าทำไมจึงApplication_Error()ไม่เรียกใช้วิธีการ ...

Global.asax.cs

public class MvcApplication : System.Web.HttpApplication
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute()); // this line is the culprit
    }
...
}

ตามค่าเริ่มต้น (เมื่อสร้างโปรเจ็กต์ใหม่) แอปพลิเคชัน MVC จะมีตรรกะบางอย่างในGlobal.asax.csไฟล์ ตรรกะนี้ใช้สำหรับการแมปเส้นทางและการลงทะเบียนตัวกรอง โดยค่าเริ่มต้นจะลงทะเบียนเพียงตัวกรองเดียว: HandleErrorAttributeตัวกรอง เมื่อ customErrors เปิดอยู่ (หรือผ่านการร้องขอระยะไกลเมื่อตั้งค่าเป็น RemoteOnly) HandleErrorAttribute จะบอกให้ MVC มองหามุมมองข้อผิดพลาดและจะไม่เรียกใช้Application_Error()เมธอด ฉันไม่สามารถหาเอกสารนี้ แต่ก็มีการอธิบายในคำตอบนี้บน programmers.stackexchange.com

ที่จะได้รับ ApplicationError () วิธีการเรียกร้องให้ทุกคนยกเว้น unhandled เอาง่ายๆบรรทัดที่ลงทะเบียนกรอง HandleErrorAttribute

ตอนนี้ปัญหาคือ: กำหนดค่า customErrors อย่างไรให้ได้สิ่งที่ต้องการ ...

customErrors redirectMode="ResponseRedirect"ส่วนค่าเริ่มต้น คุณสามารถระบุแอตทริบิวต์ defaultRedirect ให้เป็นเส้นทาง MVC ได้เช่นกัน ฉันสร้าง ErrorController ซึ่งง่ายมากและเปลี่ยน web.config ของฉันให้เป็นแบบนี้ ...

web.config

<customErrors mode="RemoteOnly" redirectMode="ResponseRedirect" defaultRedirect="~/Error">
  <error statusCode="404" redirect="~/Error/PageNotFound" />
</customErrors>

ปัญหาในการแก้ปัญหานี้คือ 302 เปลี่ยนเส้นทางไปยัง URL ข้อผิดพลาดของคุณจากนั้นหน้าเหล่านั้นจะตอบสนองด้วยรหัสสถานะ 200 สิ่งนี้ทำให้ Google จัดทำดัชนีหน้าข้อผิดพลาดซึ่งไม่ดี นอกจากนี้ยังไม่สอดคล้องกับข้อกำหนด HTTP มากนัก สิ่งที่ฉันต้องการทำไม่ใช่การเปลี่ยนเส้นทางและแทนที่การตอบกลับเดิมด้วยมุมมองข้อผิดพลาดที่กำหนดเอง

redirectMode="ResponseRewrite"ผมพยายามที่จะเปลี่ยน น่าเสียดายที่ตัวเลือกนี้ไม่รองรับเส้นทาง MVCเฉพาะเพจ HTML แบบคงที่หรือ ASPX ฉันพยายามใช้หน้า HTML แบบคงที่ในตอนแรก แต่โค้ดตอบกลับยังคงเป็น 200 แต่อย่างน้อยก็ไม่เปลี่ยนเส้นทาง จากนั้นฉันก็ได้แนวคิดจากคำตอบนี้ ...

ฉันตัดสินใจเลิกใช้ MVC เพื่อจัดการข้อผิดพลาด ฉันสร้างError.aspxไฟล์PageNotFound.aspx. และไฟล์. หน้าเหล่านี้เรียบง่ายมาก แต่มีเวทมนตร์ชิ้นเดียว ...

<script type="text/C#" runat="server">
    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);
        Response.StatusCode = (int) System.Net.HttpStatusCode.InternalServerError;
    }
</script>

บล็อกนี้จะบอกหน้าที่ให้บริการด้วยรหัสสถานะที่ถูกต้อง ของหยาบบนเพจ PageNotFound.aspx ฉันใช้HttpStatusCode.NotFoundแทน ฉันเปลี่ยน web.config เป็นแบบนี้ ...

<customErrors mode="RemoteOnly" redirectMode="ResponseRewrite" defaultRedirect="~/Error.aspx">
  <error statusCode="404" redirect="~/PageNotFound.aspx" />
</customErrors>

ทุกอย่างทำงานได้อย่างสมบูรณ์แบบ!

สรุป:

  • ลบบรรทัด: filters.Add(new HandleErrorAttribute());
  • ใช้Application_Error()วิธีการบันทึกข้อยกเว้น
  • ใช้ customErrors กับ ResponseRewrite โดยชี้ไปที่เพจ ASPX
  • ทำให้เพจ ASPX รับผิดชอบโค้ดสถานะการตอบกลับของตนเอง

มีข้อเสียสองสามประการที่ฉันสังเกตเห็นด้วยวิธีนี้

  • หน้า ASPX ไม่สามารถแชร์มาร์กอัปกับเทมเพลต Razor ได้ฉันต้องเขียนมาร์กอัปส่วนหัวและส่วนท้ายมาตรฐานของเว็บไซต์ของเราใหม่เพื่อให้ได้รูปลักษณ์และความรู้สึกที่สอดคล้องกัน
  • หน้า * .aspx สามารถเข้าถึงได้โดยตรงโดยการกดปุ่ม URL

มีวิธีแก้ไขสำหรับปัญหาเหล่านี้ แต่ฉันไม่ได้กังวลมากพอที่พวกเขาจะทำงานพิเศษใด ๆ

ฉันหวังว่านี่จะช่วยทุกคน!


2
+1! วิธีแก้ปัญหาที่ดีจริงๆ แต่ผลของการผสม MVC กับเพจ aspx อาจเป็นอย่างไร
Diego

2
เรามีสิ่งนี้ใน PROD เป็นเวลาสองสามเดือนแล้วและฉันไม่พบและผลกระทบเชิงลบ 'gotcha' เพียงอย่างเดียวคือเราต้องเปลี่ยน CI ของเราและปรับใช้เพื่อทำงาน AspCompile MSBUILD เพราะ MVC ไม่ต้องการ แต่เมื่อเราเพิ่มไฟล์. asพวกเขาต้องการมัน อาจมีปัญหาอื่น ๆ แต่ยังไม่ปรากฏ ...
Jesse Webb

ฉันพยายามใช้แนวทางนี้ใน MVC4 และเห็นได้ชัดว่ามันใช้ได้กับฉันเมื่อฉันได้รับ<customErrors mode="Off" />เท่านั้น การfilters.Add(new HandleErrorAttribute());เอาออกหรือไม่ไม่มีผล
Grzegorz Sławecki

ในหน้า aspx คุณสามารถเพิ่มการโทร ajax เพื่อเรียกดูมุมมองที่คุณต้องการแสดง บันทึกการต้องทำรหัสซ้ำ
Mike

71

ฉันแก้ไขสิ่งนี้โดยการสร้าง ExceptionFilter และบันทึกข้อผิดพลาดที่นั่นแทน Application_Error สิ่งที่คุณต้องทำคือเพิ่มการโทรใน RegisterGlobalFilters

log4netExceptionFilter.cs

using System
using System.Web.Mvc;

public class log4netExceptionFilter : IExceptionFilter
{
    public void OnException(ExceptionContext context)
    {
        Exception ex = context.Exception;
        if (!(ex is HttpException)) //ignore "file not found"
        {
            //Log error here
        }
    }
}

Global.asax.cs

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new log4netExceptionFilter()); //must be before HandleErrorAttribute
    filters.Add(new HandleErrorAttribute());
}

6
+1 หากคำตอบนี้ใช้ได้ผลสำหรับฉันดูเหมือนว่าฉันจะเป็นวิธีที่สง่างามที่สุดและอาจเป็นวิธีที่ตั้งใจที่สุด (โดยเฟรมเวิร์ก MVC) ในการจัดการข้อผิดพลาด
Matt Hamsmith

2
สิ่งนี้ใช้ได้ผลสำหรับฉันและดีกว่าคำตอบที่ยอมรับที่นี่มาก ดี!
Alex Warren

3
วิธีนี้จะใช้ได้กับการแก้ปัญหาข้อยกเว้นการบันทึก คุณรวมสิ่งนี้กับการแสดงหน้าข้อผิดพลาดที่กำหนดเองได้อย่างไร
Jesse Webb

3
ฉันลองสิ่งนี้แล้วและใช้งานได้ดียกเว้นในกรณีของยุค 404 สำหรับยุค 404 จะไม่แสดงมุมมอง Errors.cshtml แต่จะให้เฉพาะ YSoD แก่ฉัน หากไม่จำเป็นต้องใช้ 404 แบบกำหนดเองโซลูชันนี้จะสะอาดกว่าแน่นอน!
Jesse Webb

1
ฉันชอบมัน. ทำงานร่วมกับ 'CustomErrors = On'
Illidan

36

ฉันพบบทความที่อธิบายวิธีการสร้างหน้าข้อผิดพลาดแบบกำหนดเองที่สะอาดกว่าในแอปพลิเคชันเว็บ MVC3 ซึ่งไม่ได้ป้องกันความสามารถในการบันทึกข้อยกเว้น

วิธีแก้ปัญหาคือการใช้<httpErrors>องค์ประกอบของ<system.webServer>ส่วน

ฉันกำหนดค่าWeb.configของฉันเช่นนั้น ...

<httpErrors errorMode="DetailedLocalOnly" existingResponse="Replace">
  <remove statusCode="404" subStatusCode="-1" />
  <remove statusCode="500" subStatusCode="-1" />
  <error statusCode="404" path="/Error/NotFound" responseMode="ExecuteURL" />
  <error statusCode="500" path="/Error" responseMode="ExecuteURL" />
</httpErrors>

ฉันยังกำหนดค่าcustomErrorsให้มีmode="Off"(ตามที่แนะนำในบทความ)

นั่นทำให้การตอบสนองถูกลบล้างโดยการกระทำของ ErrorController นี่คือตัวควบคุม:

public class ErrorController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    public ActionResult NotFound()
    {
        return View();
    }
}

มุมมองตรงไปตรงมามากฉันเพิ่งใช้ไวยากรณ์ Razor มาตรฐานเพื่อสร้างเพจ

เพียงอย่างเดียวก็เพียงพอแล้วสำหรับคุณที่จะใช้เพจข้อผิดพลาดที่กำหนดเองกับ MVC

ฉันต้องการบันทึกข้อยกเว้นดังนั้นฉันจึงขโมยโซลูชันของ Markโดยใช้ ExceptionFilter ที่กำหนดเอง ...

public class ExceptionPublisherExceptionFilter : IExceptionFilter
{
    public void OnException(ExceptionContext exceptionContext)
    {
        var exception = exceptionContext.Exception;
        var request = exceptionContext.HttpContext.Request;
        // log stuff
    }
}

สิ่งสุดท้ายที่คุณต้องทำคือลงทะเบียนตัวกรองข้อยกเว้นในGlobal.asax.csของคุณไฟล์ :

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new ExceptionPublisherExceptionFilter());
    filters.Add(new HandleErrorAttribute());
}

นี่เป็นวิธีแก้ปัญหาที่สะอาดกว่าคำตอบก่อนหน้าของฉันมากและใช้ได้ผลดีเท่าที่ฉันบอกได้ ฉันชอบเป็นพิเศษเพราะมันไม่ได้รู้สึกว่าฉันกำลังต่อสู้กับกรอบ MVC; โซลูชันนี้ใช้ประโยชน์ได้จริง!


6
เป็นมูลค่าการกล่าวขวัญว่าฉันคิดว่าโซลูชันนี้ใช้ได้เฉพาะใน IIS 7 และใหม่กว่า เพิ่งเพิ่มองค์ประกอบ httpErrors
Jesse Webb

คำตอบนี้ไม่ได้ผลสำหรับฉัน แต่มีฉันมันทำให้ฉันเป็นสีน้ำเงินที่น่ากลัว: HTTP Error 500.0 - Internal Server Error The page cannot be displayed because an internal server error has occurred. หน้าจอข้อผิดพลาดไม่ใช่/Error/Indexหน้าที่ขอ
Serj Sagan

@SerjSagan ฉันเพิ่งลองสิ่งนี้ในโครงการใหม่เพื่อทดสอบขั้นตอนและมันก็ใช้ได้ดี คุณใช้ IIS, IIS Express หรือ VS Dev Server หรือไม่? สิ่งนี้จะไม่ทำงานในเซิร์ฟเวอร์ VS Dev เมื่อฉันตั้งค่าโครงการให้ใช้ VS Dev Server ไม่ใช่ IIS ฉันสังเกตเห็นข้อผิดพลาดของหน้าจอเหลืองแทนที่จะเป็นหน้าข้อผิดพลาดที่กำหนดเอง
Jesse Webb

1
@SerjSagan แต่ดูเหมือนว่าคุณจะได้รับข้อผิดพลาด IIS Blue-screen ซึ่งตรงข้ามกับข้อผิดพลาดหน้าจอเหลืองแบบคลาสสิก สิ่งนี้ทำให้ฉันถือว่าคุณกำลังใช้ IIS บางรูปแบบ ถ้าเป็นเช่นนั้นให้อ่านบทความที่ฉันเชื่อมโยงในประโยคแรกโดยเฉพาะในส่วนสุดท้ายที่มีชื่อว่า "บันทึกสำคัญเล็กน้อย" มันบอกว่า:To able to overwrite global settings in global IIS settings (file: C:\Windows\System32\inetsrv\config \applicationHost.config) should be: <section name="httpErrors" overrideModeDefault="Allow" />
Jesse Webb

3
@SerjSagan การเปลี่ยน errorMode เป็น DetailLocalOnly หรือกำหนดเองจะแสดงเพจของคุณ
Daniel P

8

ในกรณีที่ใช้ASP.NET MVC5

public class ExceptionPublisherExceptionFilter : IExceptionFilter
    {
        private static Logger _logger = LogManager.GetCurrentClassLogger();
        public void OnException(ExceptionContext exceptionContext)
        {
            var exception = exceptionContext.Exception;
            var request = exceptionContext.HttpContext.Request;
            // HttpException httpException = exception as HttpException;
            // Log this exception with your logger
            _logger.Error(exception.Message);
        }
    }

คุณสามารถค้นหาได้ในFilterConfig.csของApp_Startโฟลเดอร์


1

ฉันชอบคำตอบของ Mark กับ ExceptionFilter แต่อีกทางเลือกหนึ่งหากคุณมีคอนโทรลเลอร์ทั้งหมดที่ได้มาจากคอนโทรลเลอร์พื้นฐานเดียวกันก็คือการแทนที่ OnException ในตัวควบคุมพื้นฐานของคุณ คุณสามารถบันทึกข้อมูลและส่งอีเมลได้ที่นั่น สิ่งนี้มีข้อดีคือสามารถใช้การอ้างอิงใด ๆ ที่คุณได้ฉีดเข้าไปในตัวควบคุมฐานด้วยคอนเทนเนอร์ IoC ของคุณ

คุณยังคงสามารถใช้ IoC ของคุณกับ IExceptionFilter ได้ แต่การกำหนดค่าการผูกของคุณจะยุ่งยากกว่าเล็กน้อย


0

เท่าที่ฉันทราบคุณกำลังส่งผ่านการควบคุมไปยังเพจที่ระบุในพารามิเตอร์ url และการแจ้งเตือนเหตุการณ์ของคุณจะอยู่ที่นี่แทนที่จะเป็น Application_Error

<customErrors defaultRedirect="myErrorPage.aspx"
              mode="On">
</customErrors>

สามารถดูข้อมูลมากมายได้ที่นี่: http://support.microsoft.com/kb/306355


ขอบคุณคริสฉันอ่านเอกสารและแนะนำว่า Application_Error จะถูกเรียกเมื่อเกิดข้อผิดพลาดที่ไม่สามารถจัดการได้ (ซึ่งฉันคาดหวัง) และนั่นควรจะไม่เรียกว่า Server.ClearError () ส่วน web.config customErrors จะเป็นจุดจัดการสุดท้าย อย่างไรก็ตามการเปิดใช้งาน customErrors คือสิ่งที่หยุด Application_Error จากการเริ่มทำงาน
WDuffy

เอกสารที่คุณเชื่อมโยงกำลังพูดถึงแอปพลิเคชัน ASP.NET และดูเหมือนว่าแอปพลิเคชันเว็บ MVC3 จะทำงานแตกต่างกัน
Jesse Webb

0

เพื่อหลีกเลี่ยงปัญหานี้ฉันได้ปล่อยให้ customerrors ปิดใช้งานและจัดการข้อผิดพลาดทั้งหมดจากเหตุการณ์ Application_Error ใน global.asax MVC ค่อนข้างยุ่งยากเล็กน้อยเนื่องจากฉันไม่ต้องการส่งคืนการเปลี่ยนเส้นทาง 301 ฉันต้องการส่งคืนรหัสข้อผิดพลาดที่เหมาะสม สามารถดูรายละเอียดเพิ่มเติมได้ในบล็อกของฉันที่http://www.wduffy.co.uk/blog/using-application_error-in-asp-net-mvcs-global-asax-to-handle-errors/แต่รหัสสุดท้ายคือ ตามรายการด้านล่าง ...

void Application_Error(object sender, EventArgs e)
{
    var error = Server.GetLastError();
    var code = (error is HttpException) ? (error as HttpException).GetHttpCode() : 500;

    if (code != 404)
    {
            // Generate email with error details and send to administrator
    }

    Response.Clear();
    Server.ClearError();

    string path = Request.Path;
    Context.RewritePath(string.Format("~/Errors/Http{0}", code), false);
    IHttpHandler httpHandler = new MvcHttpHandler();
    httpHandler.ProcessRequest(Context);
    Context.RewritePath(path, false);
}

และนี่คือตัวควบคุม

public class ErrorsController : Controller
{

    [HttpGet]
    public ActionResult Http404(string source)
    {
            Response.StatusCode = 404;
            return View();
    }

    [HttpGet]
    public ActionResult Http500(string source)
    {
            Response.StatusCode = 500;
            return View();
    }

}

ฉันลองใช้วิธีแก้ปัญหาของคุณแล้ว แต่มันไม่ได้ผลสำหรับฉัน ด้วยเส้นมันก็แสดงให้เห็นในตัวหน้าข้อผิดพลาดที่Response.StatusCode = ###; MVC C:\inetpub\custerr\en-USฉันไม่ชอบแนวคิดในการเรียกใช้ HttpHandlers หรือ Controllers ด้วยตนเองจากเมธอด Application_Error () ของฉัน ฉันดีใจที่คุณพบวิธีแก้ปัญหาของคุณ แต่ฉันรู้ว่าสิ่งนี้ทำให้ฉันปวดหัวขนาดไหน
Jesse Webb

0

รายการบล็อกนี้ช่วยฉัน:

http://asp-net.vexedlogic.com/2011/04/23/asp-net-maximum-request-length-exceeded/

หากคุณใช้ IIS 7.0 ขึ้นไปคุณสามารถปรับเปลี่ยนไฟล์ Web.config ของคุณเพื่อจัดการกับคำขอที่มีขนาดใหญ่เกินไป มีข้อแม้บางประการ แต่นี่คือตัวอย่าง:

<system.webServer>
  <security>
    <requestFiltering>
      <requestLimits maxAllowedContentLength="1048576" />
    </requestFiltering>
  </security>
  <httpErrors errorMode="Custom" existingResponse="Replace">
    <remove statusCode="404" subStatusCode="13" />
    <error statusCode="404" subStatusCode="13" prefixLanguageFilePath="" path="/UploadTooLarge.htm" responseMode="Redirect" />
  </httpErrors>
</system.webServer>

มีรายละเอียดเพิ่มเติมเกี่ยวกับองค์ประกอบไฟล์กำหนดค่าเหล่านี้ที่นี่:

http://www.iis.net/ConfigReference/system.webServer/security/requestFiltering/requestLimits

รหัสสถานะ 404.13 กำหนดเป็น "ความยาวเนื้อหาใหญ่เกินไป" สิ่งสำคัญอย่างหนึ่งที่ควรทราบmaxAllowedContentLengthคือระบุเป็นไบต์ ซึ่งแตกต่างจากการmaxRequestLengthตั้งค่าที่คุณพบใน<system.web>ส่วนซึ่งระบุเป็นกิโลไบต์

<system.web>
  <httpRuntime maxRequestLength="10240" />
</system.web>

โปรดทราบว่าpathแอตทริบิวต์ต้องเป็นพา ธ สัมบูรณ์เมื่อresponseModeเป็นRedirectดังนั้นให้ใส่ชื่อไดเร็กทอรีเสมือนไว้ข้างหน้าหากเกี่ยวข้อง คำตอบที่เป็นข้อมูลของ Jesse Webb แสดงให้เห็นถึงวิธีการทำเช่นนี้responseMode="ExecuteURL"และฉันคิดว่าวิธีนี้จะได้ผลดีเช่นกัน

วิธีนี้ใช้ไม่ได้หากคุณกำลังพัฒนาโดยใช้ Visual Studio Development Server (Cassini ซึ่งเป็นเว็บเซิร์ฟเวอร์ที่รวมอยู่ใน Visual Studio) ฉันคิดว่ามันจะใช้งานได้ใน IIS Express แต่ฉันยังไม่ได้ทดสอบ


0

ฉันประสบปัญหาเดียวกันที่Application_Error()ไม่ได้รับการตี ฉันพยายามทุกอย่างจนในที่สุดฉันก็ก้าวผ่านสิ่งที่เกิดขึ้น ฉันมีโค้ดที่กำหนดเองในเหตุการณ์ ELMAH ที่กำลังเพิ่ม JSON ในอีเมลที่ส่งและมีข้อผิดพลาดเป็นโมฆะ!

การแก้ไขข้อผิดพลาดภายในทำให้โค้ดทำงานต่อไปได้Application_Error()ตามที่คาดไว้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.