Redirect To Action不携带异常数据

时间:2013-05-07 07:02:21

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

我有一个基本控制器,负责处理摘要。所以我在控制器中的所有操作都只是委托给basecontroller中的动作。

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

我的基本控制器操作是

   public ActionResult Error(Exception ex)

这里的问题是基本控制器中的错误操作中出现了激活细节。我认为这些在重定向期间会被清除。

2 个答案:

答案 0 :(得分:1)

在MVC 3中,使用HandleErrorAttribute和错误视图处理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

答案 1 :(得分:0)

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

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

TempData["error"] = ex;

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

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

注意:tempdata用于短期数据,在重定向场景中尤其方便