asp.net-mvc - Controller MVC中的错误传播

标签 asp.net-mvc error-handling

当我尝试传播异常并将其作为参数传递给我的ErrorController时,它始终为null。

Controller

public ActionResult Test()
{
    try
    {
        throw new Exception("ALGO");
        //
        return View();
    }
    catch (Exception ex)
    {
        return RedirectToAction("Error", "Error",
                new
                {
                    exception = ex,
                    controller = this.ControllerContext.RouteData.Values["controller"],
                    action = this.ControllerContext.RouteData.Values["action"]
                });
    }
}

ErrorController
public ActionResult Error(Exception exception, string controller, string action)
{
    // exception is always null...
    Response.StatusCode = 500;
    ViewBag.exception = new HandleErrorInfo(exception, controller, action);

    return View();
}

知道如何正确获取异常吗?

有更好的错误处理方法吗?

我也尝试了这个one,但是由于parameteless constructor for handleerrorinfo我遇到了几个错误

最佳答案

每当您使用RedirectToAction时,它都会执行HTTP重定向。您传递的任何值都必须是原始类型,因为它们将被附加到重定向URL。这意味着您无法传递整个对象,就像您要尝试处理异常一样。您可以做的最简单的操作是将RedirectToAction替换为

return Error(ex, this.ControllerContext.RouteData.Values["controller"], this.ControllerContext.RouteData.Values["action"]);

这种方法仍会调用您的Error方法并正确显示View,但不会像重定向那样更改URL。如果要使用此方法,则可以尝试使用javascript更改URL。

另外,您是否真的要向最终用户显示所有错误详细信息?如果仅使用它来显示没有详细信息的普通错误页面,则可以使用Web配置中的customErrors属性来重定向到错误页面。这样,您的最终用户只知道发生了一些错误。

关于asp.net-mvc - Controller MVC中的错误传播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31142241/

相关文章:

c# - Azure Function 中的相同方法需要更长的时间

c# - 使用简单注入(inject)器注入(inject) MVC Controller 构造函数时未注册参数

c++ - 错误:The thread 0x4c0c has exited with code 0 (0x0). Exception thrown: read access violation. **this** was nullptr

asp.net-mvc - 在 MVC 项目中将一个简单的类放在哪里?

c# - 处理 ASP.NET MVC 应用程序的参数

c# - 全局更改 MVC 中生成的 URL

.net - 如何处理一批任务中的部分成功?

google-apps-script - Google脚本自定义函数错误解决方法

c++ - 你能安全地关闭一个从未打开过的文件吗?

python - 我总是收到在分配之前引用局部变量的错误!我该如何解决?