处理全局异常后页面重定向
Page redirect after handling global exception
我正在学习 Abp 框架,在我的项目中我使用的是第三方 REST 服务,该服务需要身份验证并且会话可能会过期。我找到了处理异常的文档:
https://docs.abp.io/en/abp/latest/Exception-Handling
并实现了一个订阅者,我在其中发现了我在检测到会话已过期时抛出的自定义异常。我在我的网站上使用与第三方帐户相同的 username/password,因此如果 REST 会话过期,我需要将用户发送回登录页面。我试图在 .Application 项目中做这样疯狂的事情
internal class GlobalRedirector : ControllerBase {
internal IActionResult RedirectToLogin() {
return RedirectToPage("/Account/Login");
}
public class GlobalExceptionSubscriber : ExceptionSubscriber {
public override async Task<IActionResult> HandleAsync(ExceptionNotificationContext context) {
if (context.Exception is RestSessionExpiredException) {
var redirector = new GlobalRedirector();
return redirector.RedirectToLogin();
}
return new OkResult();
}
}
}
我调试了一些断点,发现 RedirectToLogin 方法正在执行但不起作用,这就像 Abp 框架正在吞下异常并按照它想要的方式处理它。我从普通页面 OnGet 测试了重定向,它确实有效……在处理全局异常时,无论如何都可以使重定向正常工作吗?
您的代码只创建了一个 RedirectOjbectResult,没有做任何其他事情。
您必须注入 IHttpContextAccessor
并添加重定向到 HttpContext 的响应。
public class MyExSubscriber : ExceptionSubscriber
{
readonly IHttpContextAccessor _httpContextAccessor;
public MyExSubscriber(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
public override async Task HandleAsync(ExceptionNotificationContext context)
{
// do your stuff.
_httpContextAccessor.HttpContext.Response.Redirect("/account/login");
}
}
我正在学习 Abp 框架,在我的项目中我使用的是第三方 REST 服务,该服务需要身份验证并且会话可能会过期。我找到了处理异常的文档:
https://docs.abp.io/en/abp/latest/Exception-Handling
并实现了一个订阅者,我在其中发现了我在检测到会话已过期时抛出的自定义异常。我在我的网站上使用与第三方帐户相同的 username/password,因此如果 REST 会话过期,我需要将用户发送回登录页面。我试图在 .Application 项目中做这样疯狂的事情
internal class GlobalRedirector : ControllerBase {
internal IActionResult RedirectToLogin() {
return RedirectToPage("/Account/Login");
}
public class GlobalExceptionSubscriber : ExceptionSubscriber {
public override async Task<IActionResult> HandleAsync(ExceptionNotificationContext context) {
if (context.Exception is RestSessionExpiredException) {
var redirector = new GlobalRedirector();
return redirector.RedirectToLogin();
}
return new OkResult();
}
}
}
我调试了一些断点,发现 RedirectToLogin 方法正在执行但不起作用,这就像 Abp 框架正在吞下异常并按照它想要的方式处理它。我从普通页面 OnGet 测试了重定向,它确实有效……在处理全局异常时,无论如何都可以使重定向正常工作吗?
您的代码只创建了一个 RedirectOjbectResult,没有做任何其他事情。
您必须注入 IHttpContextAccessor
并添加重定向到 HttpContext 的响应。
public class MyExSubscriber : ExceptionSubscriber
{
readonly IHttpContextAccessor _httpContextAccessor;
public MyExSubscriber(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
public override async Task HandleAsync(ExceptionNotificationContext context)
{
// do your stuff.
_httpContextAccessor.HttpContext.Response.Redirect("/account/login");
}
}