diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI/wwwroot/libs/abp/abp-jquery.js b/src/Volo.Abp.AspNetCore.Mvc.UI/wwwroot/libs/abp/abp-jquery.js index c70a78d457..8b7d0d1ec9 100644 --- a/src/Volo.Abp.AspNetCore.Mvc.UI/wwwroot/libs/abp/abp-jquery.js +++ b/src/Volo.Abp.AspNetCore.Mvc.UI/wwwroot/libs/abp/abp-jquery.js @@ -24,7 +24,7 @@ userOptions.success && userOptions.success(data); }).fail(function (jqXHR) { if (jqXHR.getResponseHeader('_AbpErrorFormat') === 'true') { - abp.ajax.handleAbpErrorResponse(jqXHR.responseJSON, userOptions, $dfd, jqXHR); + abp.ajax.handleAbpErrorResponse(jqXHR, userOptions, $dfd); } else { abp.ajax.handleNonAbpErrorResponse(jqXHR, userOptions, $dfd); } @@ -82,46 +82,46 @@ } }, + handleErrorStatusCode: function (status) { + switch (status) { + case 401: + abp.ajax.handleUnAuthorizedRequest( + abp.ajax.showError(abp.ajax.defaultError401), + abp.appPath + ); + break; + case 403: + abp.ajax.showError(abp.ajax.defaultError403); + break; + case 404: + abp.ajax.showError(abp.ajax.defaultError404); + break; + default: + abp.ajax.showError(abp.ajax.defaultError); + break; + } + }, + handleNonAbpErrorResponse: function (jqXHR, userOptions, $dfd) { if (userOptions.abpHandleError !== false) { - switch (jqXHR.status) { - case 401: - abp.ajax.handleUnAuthorizedRequest( - abp.ajax.showError(abp.ajax.defaultError401), - abp.appPath - ); - break; - case 403: - abp.ajax.showError(abp.ajax.defaultError403); - break; - case 404: - abp.ajax.showError(abp.ajax.defaultError404); - break; - default: - abp.ajax.showError(abp.ajax.defaultError); - break; - } + abp.ajax.handleErrorStatusCode(jqXHR.status); } $dfd.reject.apply(this, arguments); userOptions.error && userOptions.error.apply(this, arguments); }, - handleAbpErrorResponse: function (data, userOptions, $dfd, jqXHR) { + handleAbpErrorResponse: function (jqXHR, userOptions, $dfd) { var messagePromise = null; - if (data.error) { - if (userOptions.abpHandleError !== false) { - messagePromise = abp.ajax.showError(data.error); - } - } else { - data.error = abp.ajax.defaultError; + if (userOptions.abpHandleError !== false) { + messagePromise = abp.ajax.showError(jqXHR.responseJSON.error); } - abp.ajax.logError(data.error); + abp.ajax.logError(jqXHR.responseJSON.error); - $dfd && $dfd.reject(data.error, jqXHR); - userOptions.error && userOptions.error(data.error, jqXHR); + $dfd && $dfd.reject(jqXHR.responseJSON.error, jqXHR); + userOptions.error && userOptions.error(jqXHR.responseJSON.error, jqXHR); if (jqXHR.status === 401 && userOptions.abpHandleError !== false) { abp.ajax.handleUnAuthorizedRequest(messagePromise); diff --git a/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionFilter.cs b/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionFilter.cs index df1e1c7aea..f9fcd1d721 100644 --- a/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionFilter.cs +++ b/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionFilter.cs @@ -14,8 +14,6 @@ namespace Volo.Abp.AspNetCore.Mvc.ExceptionHandling { public ILogger Logger { get; set; } - //TODO: Use EventBus to trigger error handled event like in previous ABP - private readonly IExceptionToErrorInfoConverter _errorInfoConverter; private readonly HttpExceptionStatusCodeFinder _statusCodeFinder; @@ -29,24 +27,37 @@ namespace Volo.Abp.AspNetCore.Mvc.ExceptionHandling public void OnException(ExceptionContext context) { - if (!context.ActionDescriptor.IsControllerAction()) + if (!ShouldHandleException(context)) { return; } - //TODO: Create DontWrap attribute to control wrapping..? - Logger.LogException(context.Exception); + HandleAndWrapException(context); } - private void HandleAndWrapException(ExceptionContext context) + private bool ShouldHandleException(ExceptionContext context) { - if (!context.ActionDescriptor.IsControllerAction() || !ActionResultHelper.IsObjectResult(context.ActionDescriptor.GetMethodInfo().ReturnType)) + if (context.ActionDescriptor.IsControllerAction() && + ActionResultHelper.IsObjectResult(context.ActionDescriptor.GetMethodInfo().ReturnType)) { - return; + //TODO: Create DontWrap attribute to control wrapping..? + + return true; } + var accept = context.HttpContext.Request.Headers["Accept"]; + if (accept.ToString().Contains("application/json")) //TODO: Optimize + { + return true; + } + + return false; + } + + private void HandleAndWrapException(ExceptionContext context) + { context.HttpContext.Response.StatusCode = _statusCodeFinder.GetStatusCode(context.HttpContext, context.Exception); context.HttpContext.Response.Headers.Add(new KeyValuePair("_AbpErrorFormat", "true")); @@ -56,7 +67,7 @@ namespace Volo.Abp.AspNetCore.Mvc.ExceptionHandling ) ); - //EventBus.Trigger(this, new AbpHandledExceptionData(context.Exception)); + //TODO: Trigger an AbpExceptionHandled event or something like that. context.Exception = null; //Handled! } diff --git a/src/Volo.Abp.Identity.Web/Pages/Identity/Users/CreateModal.cshtml b/src/Volo.Abp.Identity.Web/Pages/Identity/Users/CreateModal.cshtml index bf7433df46..2bb93d4199 100644 --- a/src/Volo.Abp.Identity.Web/Pages/Identity/Users/CreateModal.cshtml +++ b/src/Volo.Abp.Identity.Web/Pages/Identity/Users/CreateModal.cshtml @@ -17,7 +17,7 @@