2011-08-11 22 views
5

Cuando vuelvo a dirigir al igual que de esta manera¿Por qué existe la diferencia entre Response.Redirect vs new RedirectResult()?

protected override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
     filterContext.Result = new RedirectResult("https://mydom.com"); 
} 

lo que el navegador redirige a http://mydom.com/httpS://mydom.com

pero si vuelvo a dirigir esta manera

protected override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
     var res = filterContext.HttpContext.Response; 
     filterContext.Result = res.Redirect("https://mydom.com"); 
} 

por lo que el redireccionamiento del navegador correctamente para https://mydom.com

¿Por qué existe la diferencia?

+0

bien, ya he indicado la diferencia: D – Shaokan

+0

Pero por qué sucede esto? – theateist

Respuesta

2

En primer lugar, RedirectResult es una clase, mientras que HttpResponse.Redirect es un método. Mientras que el primero redirige al usuario a un URI específico, este último lo redirigirá a una URL determinada. Para ver las diferencias entre URL y URI see here.

Espero que ayude

+1

En el reflector vi lo que hace RedirectResult 'string url = UrlHelper.GenerateContentUrl (this.Url, context.HttpContext); context.Controller.TempData.Keep(); context.HttpContext.Response.Redirect (url, false); ', así que como puedo ver, ReidrectResult también redirige a URL y no a URI. ¿Qué extraño? – theateist

+0

@theateist Al parecer, HttpResponse.Redirect utiliza true como valor predeterminado y, por lo tanto, finaliza la acción de inmediato. Mientras que RedirectResult, si su código es lo que usa, no finaliza la acción de inmediato. – Shaokan

Cuestiones relacionadas