การบันทึกข้อยกเว้นทั่วโลกของ WebAPI (OWIN) ด้วย CreateErrorResponse

มีวิธีการจับข้อยกเว้นที่ได้รับการจัดการเมื่อใช้ CreateErrorResponse() เพื่อส่งคืนการตอบสนองข้อผิดพลาดด้วยวิธี API หรือไม่ ขณะนี้ฉันได้ลงทะเบียนตัวบันทึกข้อยกเว้นสากลอย่างง่ายสำหรับข้อยกเว้นใด ๆ อย่างไรก็ตามสำหรับการตอบสนองของ API บางอย่างรวมถึงแอตทริบิวต์ Model Filter ฉัน CreateErrorResponse() เพื่อส่งคืนการตอบสนองข้อผิดพลาด แต่ไม่ได้ป้อนวิธี Log() ใน Global Exception Logger . ตัวอย่างการใช้งาน CreateErrorResponse ในวิธี API :

return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e);

ตัวบันทึกข้อยกเว้นสากล:

public class GlobalExceptionLogger : ExceptionLogger
    {
        private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
        public override void Log(ExceptionLoggerContext context)
        {
            log.Error(context.Exception);
        }
    }

วิธีเดียวที่จะเรียกเมธอด Log() แทนที่จะใช้ CreateErrorResponse ให้ส่ง Exception แทน สิ่งนี้ถูกต้องหรือไม่?


person Rubans    schedule 19.01.2018    source แหล่งที่มา


คำตอบ (1)


คุณควรบันทึกข้อผิดพลาดและข้อมูลการติดตามใดๆ ไว้ในโฟลว์เชิงลบเดียวกันกับที่คุณกำลังสร้างและส่งคืนการตอบกลับข้อผิดพลาด

การใช้ข้อยกเว้นเพื่อควบคุมการไหลของแอปพลิเคชันถือเป็นแนวปฏิบัติที่ไม่ดี โปรดหลีกเลี่ยง

การใช้ Global Handler คือการจัดการทุกสิ่งที่คุณยังไม่ได้จัดการ และควรเป็นกรณีพิเศษ มาก คุณยังเข้าสู่ระบบและแสดงข้อความแสดงข้อผิดพลาดทั่วไปแก่ผู้ใช้ ในขณะที่คุณจัดการกับความสับสนวุ่นวาย อยู่ด้านหลังแน่นอน :)

หากฉันเข้าใจผิดคำถามของคุณโปรดแก้ไขฉัน

person MarkovskI    schedule 19.01.2018