我正在开发一个完整的Web应用程序,我正在使用ASP.NET MVC 3框架。我正在实现ActionFilterAttribute
。
我正在覆盖OnActionExecuting
方法。如果在OnActionExecuting
方法中捕获到异常,我想重定向客户端浏览器。重定向URL以我的一个控制器中的操作方法为目标。我想将Exception
对象中的数据传递到重定向URL。
有没有办法构建包含Exception
对象的URL,然后将URL传递给RedirectResult
构造函数?
答案 0 :(得分:8)
有没有办法构建一个包含Exception对象的URL然后 将URL传递给RedirectResult构造函数?
没有。您只能传递查询字符串参数,例如:
var values = new RouteValueDictionary(new
{
action = "foo",
controller = "bar",
exceptiontext = "foo bar baz"
});
filterContext.Result = new RedirectToRouteResult(values);
在目标操作中,您将能够获取异常文本参数:
public Action Foo(string exceptionText)
{
...
}
答案 1 :(得分:3)
您可以在此类情况下使用TempData。
在重定向之前设置TempData["MyException"] = myException
,然后在您重定向到的操作中检查该TempData值。
答案 2 :(得分:2)
更好的解决方案是使用[HandleError]属性。此属性的作用是在发生错误时,将向用户显示错误视图。它的工作方式是遇到错误时,如果存在[HandleError]属性,ASP.NET MVC将首先在控制器的视图文件夹中搜索Error视图,然后在共享视图文件夹中搜索。
例如:
[HandleError]
public class FooController : Controller {
...
}
当FooController的任何操作发生错误时,ASP.NET MVC将首先在〜/ Views / Foo中搜索Error视图(ASP.NET视图引擎的名为Error.aspx的视图,或Error.cshtml用于剃刀视图引擎)。如果找不到该视图,它将在〜/ Views / Shared中搜索。
在您的视图中,您可以显示一般错误,并显示任何异常信息。
有关[HandleError]属性的更详细说明,请参阅http://blogs.msdn.com/b/gduthie/archive/2011/03/17/get-to-know-action-filters-in-asp-net-mvc-3-using-handleerror.aspx。