/// <summary> /// Called when an exception is thrown. /// </summary> /// <param name="filterContext">The filter context.</param> protected override void OnException(ExceptionContext filterContext) { if (filterContext == null) { throw new ArgumentNullException("filterContext"); } base.OnException(filterContext); Exception currentException = null; if (filterContext.Exception as AggregateException != null) { currentException = filterContext.Exception.InnerException; } else { currentException = filterContext.Exception; } if (currentException as UserAuthorizationException != null || currentException as UserAuthenticationException != null || currentException as AuthenticationException != null) { ServiceUtilities.CleanUpOnSignOutOrAuthFailure(this.HttpContext); RetailProxyException retailProxyException = currentException as RetailProxyException; ResponseError responseError = new ResponseError() { ErrorCode = retailProxyException.ErrorResourceId, LocalizedErrorMessage = retailProxyException.LocalizedMessage, }; filterContext.Result = this.Json(responseError); filterContext.HttpContext.Response.StatusCode = 310; filterContext.HttpContext.Response.RedirectLocation = "/SignIn"; filterContext.ExceptionHandled = true; RetailLogger.Log.OnlineStoreForceSignOutOnAuthenticatedFlowError( filterContext.HttpContext.Response.StatusCode, filterContext.HttpContext.Response.RedirectLocation, filterContext.Exception, filterContext.Exception.InnerException); } else { if (currentException as CartValidationException != null) { CartValidationException cartValidationException = (CartValidationException)currentException; if (string.Equals(cartValidationException.ErrorResourceId, DataValidationErrors.Microsoft_Dynamics_Commerce_Runtime_CartNotFound.ToString(), StringComparison.OrdinalIgnoreCase)) { ServiceUtilities.ClearCartCookies(this.HttpContext); } } IEnumerable <ResponseError> responseErrors = Utilities.GetResponseErrorsFromException(currentException); filterContext.ExceptionHandled = true; filterContext.Result = this.Json(responseErrors); filterContext.HttpContext.Response.StatusCode = 400; RetailLogger.Log.OnlineStoreLogUnexpectedException( filterContext.RequestContext.HttpContext.Request.Url.AbsoluteUri, filterContext.Exception, filterContext.Exception.InnerException); } }