Browse Source

Handle exceptions or modal.

pull/179/head
Halil İbrahim Kalkan 8 years ago
parent
commit
47429a2f12
  1. 56
      src/Volo.Abp.AspNetCore.Mvc.UI/wwwroot/libs/abp/abp-jquery.js
  2. 29
      src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionFilter.cs
  3. 2
      src/Volo.Abp.Identity.Web/Pages/Identity/Users/CreateModal.cshtml
  4. 14
      src/Volo.Abp.Identity.Web/wwwroot/modules/identity/helpers/ModalManager.js

56
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);

29
src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionFilter.cs

@ -14,8 +14,6 @@ namespace Volo.Abp.AspNetCore.Mvc.ExceptionHandling
{
public ILogger<AbpExceptionFilter> 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<string, StringValues>("_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!
}

2
src/Volo.Abp.Identity.Web/Pages/Identity/Users/CreateModal.cshtml

@ -17,7 +17,7 @@
<ul class="nav nav-tabs" role="tablist">
<li class="nav-item">
<a class="nav-link active" data-toggle="tab" href="#CreateUser_UserInfo" role="tab">@Localizer["CreateUser"]</a>
<a class="nav-link active" data-toggle="tab" href="#CreateUser_UserInfo" role="tab">@Localizer["UserInformations"]</a>
</li>
<li class="nav-item">
<a class="nav-link" data-toggle="tab" href="#CreateUser_RolesTab" role="tab">@Localizer["Roles"]</a>

14
src/Volo.Abp.Identity.Web/wwwroot/modules/identity/helpers/ModalManager.js

@ -68,6 +68,7 @@ var abp = abp || {};
if (_$form.length) {
if (_$form.attr('data-ajaxForm') !== 'false') {
_$form.ajaxForm({
dataType: 'json',
beforeSubmit: function() {
_setBusy(true);
},
@ -75,8 +76,17 @@ var abp = abp || {};
_publicApi.setResult.apply(_publicApi, arguments);
_$modal.modal('hide');
},
error: function() {
//TODO: Handle error!
error: function (jqXHR) {
//TODO: Better and central error handling!
if (jqXHR.getResponseHeader('_AbpErrorFormat') === 'true') {
abp.ajax.logError(jqXHR.responseJSON.error);
var messagePromise = abp.ajax.showError(jqXHR.responseJSON.error);
if (jqXHR.status === 401) {
abp.ajax.handleUnAuthorizedRequest(messagePromise);
}
} else {
abp.ajax.handleErrorStatusCode(jqXHR.status);
}
},
complete: function() {
_setBusy(false);

Loading…
Cancel
Save