2012-01-25 28 views
5

Estoy desarrollando una aplicación de web completa y estoy usando el framework ASP.NET MVC 3. Estoy implementando una subclase de ActionFilterAttribute.RedirectResult + Object como parámetro en una URL

Estoy anulando el método OnActionExecuting. Si se detecta una excepción en el método OnActionExecuting, quiero redirigir el navegador del cliente. La URL de redirección se dirige a un método de acción en uno de mis controladores. Quiero pasar datos del objeto Exception a la URL de redirección.

¿Hay alguna forma de crear una URL que incluya el objeto Exception y luego pasar la URL al constructor RedirectResult?

Respuesta

7

¿Hay alguna forma de construir una URL que incluya el objeto Exception y luego pasando la URL al constructor RedirectResult?

No. Sólo puede pasar parámetros de cadena de consulta como por ejemplo:

var values = new RouteValueDictionary(new 
{ 
    action = "foo", 
    controller = "bar", 
    exceptiontext = "foo bar baz" 
}); 
filterContext.Result = new RedirectToRouteResult(values); 

y en la acción de destino que será capaz de buscar el parámetro de texto de la excepción:

public Action Foo(string exceptionText) 
{ 
    ... 
} 
+0

¿Hay alguna manera de convertir un objeto Exception en una cadena de consulta? Luego, pasaría la cadena de consulta al constructor de RouteValueDictionary como un valor para una clave. El método de acción objetivo tomaría un objeto Exception como parámetro de entrada. – user1139666

+0

@ user1139666, no, debe incluir solo las propiedades que le interesen como parámetros de cadena de consulta. –

2

Un una mejor solución sería usar el atributo [HandleError]. Lo que hace este atributo es cuando ocurre un error, al usuario se le presentará la vista Error. La forma en que funciona es cuando se encuentra un error, si el atributo [HandleError] está presente, ASP.NET MVC buscará una vista de Error, primero en la carpeta de visualización del controlador y luego en la carpeta de vista compartida.

Por ejemplo:

[HandleError] 
public class FooController : Controller { 
    ... 
} 

Cuando se produce un error en cualquier acción para la FooController, ASP.NET MVC buscará primero en ~/Vistas/Foo para una vista de error (una vista llamada para Error.aspx el motor de vista ASP.NET o Error.cshtml para el motor de vista de afeitar). Si no se encuentra esa vista, buscará en ~/Views/Shared.

En su vista puede mostrar un error genérico, así como mostrar cualquier información de excepción.

Consulte http://blogs.msdn.com/b/gduthie/archive/2011/03/17/get-to-know-action-filters-in-asp-net-mvc-3-using-handleerror.aspx para obtener una explicación más detallada del atributo [HandleError].

3

Puede usar TempData para situaciones como esta.

Simplemente configure TempData["MyException"] = myException antes de redirigir y luego verifique ese valor de TempData en la acción a la que se redirige.

Cuestiones relacionadas