gpt4 book ai didi

asp.net-core - 异常处理和从 View 组件重定向

转载 作者:行者123 更新时间:2023-12-05 05:12:08 25 4
gpt4 key购买 nike

如何在我的 View 组件中实现异常处理?

将我的操作方法的逻辑包装到 try/catch block 中不会捕获 View 组件本身抛出的任何异常,我不希望应用程序停止运行而不管任何错误。这是我目前正在做的并试图完成的事情:

操作方法

public IActionResult LoadComments(int id)
{
try
{
return ViewComponent("CardComments", new { id });
}
catch (SqlException e)
{
return RedirectToAction("Error", "Home");
}
}

重申一下,这不会捕获 View 组件本身内部发生的SqlException,因此无法重定向。

查看组件

public class CardCommentsViewComponent : ViewComponent
{
public async Task<IViewComponentResult> InvokeAsync(int id)
{
try
{
IEnumerable<CardCommentData> comments = await DbHelper.GetCardCommentData(id);
return View(comments);
}
catch (SqlException e)
{
//Redirect from here if possible?
}
}
}

我能否通过 Controller 的操作方法完成此操作?如果没有,我如何从 View 组件本身重定向?我试过研究这个问题,但一无所获。任何信息都会有所帮助。

最佳答案

您可以尝试使用 HttpContextAccessor.HttpContext.Response.Redirect 重定向到另一个页面:

public class CardCommentsViewComponent : ViewComponent
{

private readonly IHttpContextAccessor _httpContextAccessor;
public CardCommentsViewComponent( IHttpContextAccessor httpContextAccessor)
{

_httpContextAccessor = httpContextAccessor;
}
public async Task<IViewComponentResult> InvokeAsync(int id)
{
try
{
IEnumerable<CardCommentData> comments = await DbHelper.GetCardCommentData(id);
return View(comments);
}
catch (SqlException e)
{
_httpContextAccessor.HttpContext.Response.Redirect("/About");

return View(new List<CardCommentData>());
}
}
}

在 DI 中注册:

services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();

但首选方法是使用全局异常处理程序/过滤器来跟踪异常并重定向到相关错误页面:

https://learn.microsoft.com/en-us/aspnet/core/fundamentals/error-handling?view=aspnetcore-2.2

关于asp.net-core - 异常处理和从 View 组件重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54876542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com