2010-11-13 15 views
5

¿Alguna idea de cómo solucionar el problema a continuación?Implementación de TransferResult en MVC 3 RC - no funciona

Hay una gran implementación de TransferResult disponible here, que funcionó muy bien en MVC 1,2 pero no funciona en MVC 3 RC.

public class TransferResult : RedirectResult 
{ 
    public TransferResult(string url): base(url) 
    { 
    } 

    public override void ExecuteResult(ControllerContext context) 
    { 
     var httpContext = HttpContext.Current; 
     httpContext.RewritePath(Url, false); 
     IHttpHandler httpHandler = new MvcHttpHandler(); 
     httpHandler.ProcessRequest(HttpContext.Current); 
    } 
} 

En MVC 3 RC, httpHandler.ProcessRequest falla y dice 'HttpContext.SetSessionStateBehavior' can only be invoked before 'HttpApplication.AcquireRequestState' event is raised.

Cómo reescribir el código para hacer este trabajo?

UPD: El código funciona si se ejecuta en el servidor de desarrollo integrado VS 2010, pero no se ejecuta en IIS 7.5 localhost. El problema aún no está resuelto.

UPD2 Este answer contains a modified implementation de TransferResult que funciona con MVC3. Resulta que es incluso más simple de lo que solía ser.

+0

¿alguna vez se soluciona este problema? –

+1

sí, aquí está la solución de trabajo: http://stackoverflow.com/questions/799511/how-to-simulate-server-transfer-in-asp-net-mvc/1242525#1242525 – Andy

Respuesta

0

Personalmente creo que crear rutas (con restricciones de ruta si es necesario (ver http://stephenwalther.com/blog/archive/2008/08/07/asp-net-mvc-tip-30-create-custom-route-constraints.aspx) es preferible a este 'truco' que intenta realizar una redirección invisible para que la solicitud sea manejada por un controlador y acción diferente a la especifica mediante el enrutamiento

por qué no puede simplemente utilizar el enrutamiento

+1

Uso TransferResult para implementar el manejo de errores : la acción o vista de la página actual se está procesando, y si sucede algo, se ejecuta una transferencia. – Andy

1

no es posible reproducir los siguientes funciona perfectamente bien en MVC 3 RC (maquinilla de afeitar y WebForms):.?.

public class TransferResult : RedirectResult 
{ 
    public TransferResult(string url) 
     : base(url) 
    { 
    } 

    public override void ExecuteResult(ControllerContext context) 
    { 
     var httpContext = HttpContext.Current; 
     httpContext.RewritePath(Url, false); 
     IHttpHandler httpHandler = new MvcHttpHandler(); 
     httpHandler.ProcessRequest(HttpContext.Current); 
    } 
} 

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return new TransferResult("/Home/About"); 
    } 

    public ActionResult About() 
    { 
     return View(); 
    } 
} 
+1

Este código funciona correctamente si se usa Visual Studio Devt Server para la depuración. Sin embargo, experimento el error anterior al ejecutar la aplicación en el servidor IIS local. Todavía no tuve la oportunidad de probar la aplicación en un servidor remoto, pero observé claramente la diferencia de comportamiento en estas dos configuraciones en la máquina local. – Andy

Cuestiones relacionadas