RedirectResult + Object作为URL中的参数

时间:2012-01-25 22:39:53

标签: asp.net-mvc-3 url

我正在开发一个完整的Web应用程序,我正在使用ASP.NET MVC 3框架。我正在实现ActionFilterAttribute

的子类

我正在覆盖OnActionExecuting方法。如果在OnActionExecuting方法中捕获到异常,我想重定向客户端浏览器。重定向URL以我的一个控制器中的操作方法为目标。我想将Exception对象中的数据传递到重定向URL。

有没有办法构建包含Exception对象的URL,然后将URL传递给RedirectResult构造函数?

3 个答案:

答案 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