0

我有一个处理异常处理的基本控制器。所以我在控制器中的所有操作都简单地委托给 basecontroller 中的操作。

 catch (Exception ex)
            {
                return RedirectToAction("Error", ex);
            }

我的基本控制器动作是

   public ActionResult Error(Exception ex)

这里的问题是异常细节在基本控制器的错误操作中得到澄清。我认为这些在重定向期间会被清除。

4

2 回答 2

1

HandleErrorAttribute在 MVC 3 和更高版本中,在 MVC 管道内引起的异常已通过使用和错误视图进行处理,并包含异常数据。

你会像这样注册文件管理器

public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
{ 
    filters.Add(new HandleErrorAttribute());
}

并使用类似于以下的视图

@model System.Web.Mvc.HandleErrorInfo        
@ViewBag.Title = "Error"; 

<h2>An Error Has Occurred</h2> 

@if (Model != null) { 
      <p>
           @Model.Exception.GetType().Name<br /> 
           thrown in @Model.ControllerName @Model.ActionName
      </p> 
}

有关更详细的介绍,请参阅这些文章:

http://blog.dantup.com/2009/04/aspnet-mvc-handleerror-attribute-custom.html

http://community.codesmithtools.com/CodeSmith_Community/b/tdupont/archive/2011/03/01/error-handling-and-customerrors-and-mvc3-oh-my.aspx

于 2013-05-07T23:28:31.667 回答
0

是的,这是正确的,当您进行重定向时,您基本上是在向浏览器发送 302,因此数据会丢失。

临时保存数据的一种可能方法是将其保存在 tempdata 中:

TempData["error"] = ex;

之后,您可以在错误方法中检索它:

Exception ex = TempData["error"] as Exception;

注意:临时数据用于短期数据,在重定向场景中特别方便

于 2013-05-07T07:07:38.730 回答