private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
        {
            IContainerProvider   myContainer          = (App.Current as PrismApplication).Container;
            AppExceptionsService appExceptionsService = myContainer
                                                        .Resolve <AppExceptionsService>();
            AppStatus appStatus = myContainer
                                  .Resolve <AppStatus>();

            Task.Run(async() =>
            {
                await appExceptionsService.ReadFromFileAsync();
                ExceptionRecordDto fooObject = new ExceptionRecordDto()
                {
                    CallStack     = (e.ExceptionObject as Exception).StackTrace,
                    ExceptionTime = DateTime.Now,
                    Message       = (e.ExceptionObject as Exception).Message,
                    DeviceModel   = DeviceInfo.Model,
                    DeviceName    = DeviceInfo.Name,
                    OSType        = DeviceInfo.Platform.ToString(),
                    OSVersion     = DeviceInfo.Version.ToString(),
                };
                if (appStatus.SystemStatus.UserID <= 0)
                {
                    fooObject.MyUserId = null;
                }
                else
                {
                    fooObject.MyUserId = appStatus.SystemStatus.UserID;
                }
                appExceptionsService.Items.Add(fooObject);
                await appExceptionsService.WriteToFileAsync();
            }).Wait();
        }
        public async Task <IActionResult> Put([FromRoute] int id, [FromBody] ExceptionRecordDto data)
        {
            APIResult apiResult;

            #region 驗證 DTO 物件的資料一致性
            if (!ModelState.IsValid)
            {
                apiResult = APIResultFactory.Build(false, StatusCodes.Status200OK,
                                                   ErrorMessageEnum.傳送過來的資料有問題, payload: data);
                return(Ok(apiResult));
            }
            #endregion

            var record = await ExceptionRecordService.GetAsync(id);

            if (record != null)
            {
                ExceptionRecordAdapterModel recordTarget = mapper.Map <ExceptionRecordAdapterModel>(data);
                recordTarget.Id = id;
                var result = mapper.Map <ExceptionRecordDto>(recordTarget);

                #region 修改記錄前的紀錄完整性檢查
                VerifyRecordResult verify = await ExceptionRecordService.BeforeUpdateCheckAsync(record);

                if (verify.Success == false)
                {
                    apiResult = APIResultFactory.Build(false, StatusCodes.Status200OK,
                                                       ErrorMessageMappingHelper.Instance.GetErrorMessage(verify.MessageId),
                                                       payload: result);
                    return(Ok(apiResult));
                }
                #endregion

                var verifyRecordResult = await ExceptionRecordService.UpdateAsync(recordTarget);

                if (verifyRecordResult.Success)
                {
                    apiResult = APIResultFactory.Build(true, StatusCodes.Status202Accepted,
                                                       ErrorMessageEnum.None, payload: null);
                }
                else
                {
                    apiResult = APIResultFactory.Build(false, StatusCodes.Status200OK,
                                                       ErrorMessageEnum.無法修改紀錄, payload: result);
                }
            }
            else
            {
                apiResult = APIResultFactory.Build(false, StatusCodes.Status200OK,
                                                   ErrorMessageEnum.沒有任何符合資料存在, payload: data);
            }
            return(Ok(apiResult));
        }
        public async Task <IActionResult> Post([FromBody] ExceptionRecordDto data)
        {
            APIResult apiResult;

            #region 驗證 DTO 物件的資料一致性
            if (!ModelState.IsValid)
            {
                apiResult = APIResultFactory.Build(false, StatusCodes.Status200OK,
                                                   ErrorMessageEnum.傳送過來的資料有問題, payload: data);
                return(Ok(apiResult));
            }
            #endregion

            ExceptionRecordAdapterModel record = mapper.Map <ExceptionRecordAdapterModel>(data);
            if (record != null)
            {
                var result = mapper.Map <ExceptionRecordDto>(record);

                #region 新增記錄前的紀錄完整性檢查
                VerifyRecordResult verify = await ExceptionRecordService.BeforeAddCheckAsync(record);

                if (verify.Success == false)
                {
                    apiResult = APIResultFactory.Build(false, StatusCodes.Status200OK,
                                                       ErrorMessageMappingHelper.Instance.GetErrorMessage(verify.MessageId),
                                                       payload: result);
                    return(Ok(apiResult));
                }
                #endregion

                var verifyRecordResult = await ExceptionRecordService.AddAsync(record);

                if (verifyRecordResult.Success)
                {
                    apiResult = APIResultFactory.Build(true, StatusCodes.Status201Created,
                                                       ErrorMessageEnum.None, payload: null);
                }
                else
                {
                    apiResult = APIResultFactory.Build(false, StatusCodes.Status200OK,
                                                       ErrorMessageEnum.無法新增紀錄, payload: result);
                }
            }
            else
            {
                apiResult = APIResultFactory.Build(false, StatusCodes.Status200OK,
                                                   ErrorMessageEnum.傳送過來的資料有問題, payload: data);
            }
            return(Ok(apiResult));
        }