estoy usando un derivado de rescate MvcContrib:Engañar ASP.NET en Solicitud de pensar es Ajax jQuery Solicitud de Archivo de datos Cargar
public class RescueAttribute : MvcContrib.Filters.RescueAttribute
{
public RescueAttribute(string view) : base(view)
{
IgnoreAjax = false;
}
public RescueAttribute(string view, params Type[] exceptionTypes) : base(view, exceptionTypes)
{
IgnoreAjax = false;
}
protected override ActionResult CreateActionResult(Exception exception, ExceptionContext context)
{
var controller = (string) context.RouteData.Values["controller"];
var action = (string) context.RouteData.Values["action"];
var model = new HandleErrorInfo(exception, controller, action);
if (context.Controller.ControllerContext.HttpContext.Request.IsAjaxRequest())
{
return new JsonResult(model);
}
return base.CreateActionResult(exception, context);
}
}
Ahora cuando se utiliza el archivo de carga en jQuery.form, Request.IsAjaxRequest() devuelve falso. Aparentemente esto se debe a que no puedes cargar un archivo usando json; este complemento genera un iframe oculto para realizar la carga.
Para compensar estoy anexando un campo oculto a cualquier forma que se presente con jquery.form y tiene entradas de archivos:
$(this).append('<input type="hidden" name="X-Requested-With" value="XMLHttpRequest" />');
Es lo suficientemente bueno para engañar IsAjaxRequest. ¿Hay alguna razón por la que I no debería hacer esto?
+1 para satifyingly filthy hacking – BritishDeveloper
Así que, básicamente, esto es seguro entonces. –