public void OnException(ExceptionContext context)
        {
            var httpStatusCode = HttpStatusCode.InternalServerError;

            if (context.Exception is ArgumentNullException)
            {
                httpStatusCode = HttpStatusCode.BadRequest;
            }

            var response = new WebApiResponse
            {
                Success = false,
                Error   = new ErrorDescriber
                {
                    Code        = httpStatusCode.ToString(),
                    Description = context.Exception.GetErrorMessage()
                }
            };

            context.Result = new ObjectResult(response)
            {
                StatusCode   = (int)HttpStatusCode.OK,
                DeclaredType = typeof(WebApiResponse)
            };

            if (httpStatusCode != HttpStatusCode.BadRequest)
            {
                var logServer = IoCExtensions.GetService <LogService>();
                logServer.LogException(context.Exception, "WebApiException");
            }
        }
        protected override async Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            var sw       = Stopwatch.StartNew();
            var response = await base.SendAsync(request, cancellationToken);

            sw.Stop();

            var logService = IoCExtensions.GetService <LogService>();

            logService.LogAPIRequest(m_logCode, new APIRequestInfo
            {
                Method    = request.Method.ToString(),
                Url       = request.RequestUri.AbsoluteUri,
                Paras     = request.Content == null ? null : await request.Content.ReadAsStringAsync(),
                Spend     = (int)sw.ElapsedMilliseconds,
                IsSuccess = response.IsSuccessStatusCode
            });

            return(response);
        }
        protected virtual async Task OnDeleteAsync()
        {
            var messageBox = GetService <IMessageBoxService>();
            var item       = SelectedItem;

            if (messageBox.Show(GetDeleteMessage(item), DisplayTitle, MessageBoxButton.YesNo, MessageBoxImage.Question) != MessageBoxResult.Yes)
            {
                return;
            }
            var waitService = GetService <ISplashScreenService>();

            try
            {
                waitService.ShowSplashScreen();
                using (var scope = this.BeginRequest())
                {
                    var result = await IoCExtensions.Resolve <TManager>(scope).DeleteAsync(GetId(item));

                    if (result.HasError)
                    {
                        this.ShowError(DisplayTitle, result);
                        return;
                    }
                }
                ItemsSource.Remove(item);
            }
            catch (Exception e)
            {
                waitService.HideSplashScreen();
                this.ShowError(DisplayTitle, e);
            }
            finally
            {
                waitService.HideSplashScreen();
            }
        }