/// <summary> /// 异常处理 /// </summary> public override void OnException(ExceptionContext context) { context.ExceptionHandled = true; context.HttpContext.Response.StatusCode = GetStatusCode(context); LogUtil.Error(context.Exception); var errorInfo = ExceptionConvertUtil.Convert(context.Exception); context.Result = new ObjectResult(new AjaxResponse(errorInfo)); }
public async Task OnAuthorizationAsync(AuthorizationFilterContext context) { // Allow Anonymous skips all authorization if (context.Filters.Any(item => item is IAllowAnonymousFilter)) { return; } if (!context.ActionDescriptor.IsControllerAction()) { return; } //TODO: Avoid using try/catch, use conditional checking try { await _authorizationHelper.AuthorizeAsync( context.ActionDescriptor.GetMethodInfo(), context.ActionDescriptor.GetMethodInfo().DeclaringType ); } catch (AuthorizationException ex) { LogUtil.Warn(ex); if (ActionResultHelper.IsObjectResult(context.ActionDescriptor.GetMethodInfo().ReturnType)) { var isLogin = await _authorizationHelper.CheckLoginAsync(); var errorInfo = ExceptionConvertUtil.Convert(ex); context.Result = new ObjectResult(new AjaxResponse(errorInfo)) { StatusCode = isLogin ? (int)System.Net.HttpStatusCode.Forbidden : (int)System.Net.HttpStatusCode.Unauthorized }; } else { context.Result = new ChallengeResult(); } } catch (Exception ex) { LogUtil.Error(ex); if (ActionResultHelper.IsObjectResult(context.ActionDescriptor.GetMethodInfo().ReturnType)) { context.Result = new ObjectResult(new OperateResult(ex)) { StatusCode = (int)System.Net.HttpStatusCode.InternalServerError }; } else { context.Result = new StatusCodeResult((int)System.Net.HttpStatusCode.InternalServerError); } } }