public async Task OnAuthorizationAsync(AuthorizationFilterContext context) { bool isAnonymous = context.ActionDescriptor.HasAttribute <AllowAnonymousAttribute>(); if (isAnonymous) { return; } var userInfo = context.HttpContext.Session.Get <LoginUserContext>(CommonStrings.COMMON_INFO_IN_SESSION); bool isNoCheck = context.ActionDescriptor.HasAttribute <NoCheckPasswordExpiredAttribute>(); if (userInfo?.PasswordExpired == true && !isNoCheck) { logger.Info("パスワードの有効期限切れ。パスワード変更画面に遷移します。"); string passwordChangeUrl = new PathString("/K0030_ChangePassword/Index"); //パスワードの有効期限が切れている場合は、パスワード変更画面にしかいけない。 if (context.HttpContext.Request.IsAjaxRequest()) { context.HttpContext.Response.StatusCode = StatusCodes.Status401Unauthorized; context.Result = WebUtil.JsonContent(AjaxResult.CreateRedirectResult(passwordChangeUrl)); } else { context.Result = new RedirectResult(passwordChangeUrl); } } }
/// <summary> /// 各Actionメソッドから例外がthrowされた際に呼び出される。 /// </summary> /// <param name="context"></param> public void OnException(ExceptionContext context) { if (context.ExceptionHandled) { return; //他の例外で処理済なら何もしない。 } context.ExceptionHandled = true; Exception ex = context.Exception; logger.Error("エラーが発生しました。", LogType.Exception, ex: ex); string message = (ex as CustomException)?.Message ?? "エラーが発生しました。"; _ = sendGridHelper.SendMessage("【執務管理システム】 エラーが発生しました。", ex.ToString()); //Ajaxもしくはformアプリからのリクエストの場合はJsonを返す。 if (context.HttpContext.Request.IsApiOrAjaxRequest()) { //Ajaxリクエストに対するresult。 context.Result = WebUtil.JsonString(RequestResult.CreateErrorResult(message)); } else if (StreamRequestAttribute.IsStreamFileRequest((context.ActionDescriptor as ControllerActionDescriptor)?.MethodInfo)) { //Streamリクエストに対するresult。 //とりあえずJsonと一緒。 context.Result = WebUtil.JsonContent(RequestResult.CreateErrorResult(message)); } else { ViewResult errorPageResult = new ViewResult() { ViewName = ErrorViewName, //デフォルトでViews\SharedのError.cshtmlが呼ばれる。 TempData = tempDataDictionaryFactory.GetTempData(context.HttpContext) }; if (!string.IsNullOrEmpty(message)) { errorPageResult.ViewData = new ViewDataDictionary(modelMetadataProvider, context.ModelState); errorPageResult.ViewData["ERROR_KEY"] = message; } context.Result = errorPageResult; } }