我正在使用源自 MvcContrib 的救援:
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);
}
}
现在在 jQuery.form 中使用文件上传时,Request.IsAjaxRequest() 返回 false。显然这是因为你实际上无法使用 json 上传文件;该插件会生成一个隐藏的 iframe 来进行上传。
为了补偿,我将隐藏输入附加到使用 jquery.form 提交并具有文件输入的任何表单:
$(this).append('<input type="hidden" name="X-Requested-With" value="XMLHttpRequest" />');
足以欺骗 IsAjaxRequest。我有什么理由不应该这样做吗?
最佳答案
这个方法不错。
JQuery 和其他客户端库将 X-Requested-With 放入 header 中。然而,ASP Ajax 帮助程序使用隐藏的表单元素,就像您上面所做的那样。
重要的是 IsAjaxRequest() 检查表单字段和标题。因此,如果它在任一位置找到 X-Requested-With 的 XMLHttpRequest,它将返回 true。
技术不错。有一天我可能会用到它。
关于jquery - 欺骗 ASP.NET 认为请求是 jQuery 文件上传的 Ajax 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3408058/