jquery - 欺骗 ASP.NET 认为请求是 jQuery 文件上传的 Ajax 请求

标签 jquery asp.net-mvc ajax

我正在使用源自 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/

相关文章:

javascript - 单击外部关闭 div

javascript - 通过检查cookie动态改变jQuery "hover"

php - 如何使用 Jquery/PHP 实现聊天室?

javascript - 并排显示两个外部网页的最佳方式是什么?

javascript - 使用jquery或js检测JPG CMYK图像客户端

javascript - Angular : how to keep resetting $timeout on scroll events, 否则让 $timeout 完成

javascript - ASP.NET MVC 3 - ajax调用后,重定向到新页面或生成页面刷新

jquery - 如何在 MVC View 之间显示 'loading'

asp.net-mvc - 显示 PDF ASP.Net MVC

javascript - API 响应返回未定义