扩展IsAjaxRequest()以包含fetch api请求

时间:2017-11-17 14:35:11

标签: javascript c# asp.net-mvc-5 fetch-api request-headers

我目前正在使用MVC5构建网站,我需要在发出ajax请求时提供不同的内容。

通常我们使用jQuery并使用$.ajax发出ajax请求,但最近我们已经转向使用fetch api。但是,使用fetch api的请求不会将MVC注册为ajax请求,因此使用了错误的模板。

我已经考虑过制作自己的ajax请求扩展但不确定要检查的标头:

    public static bool IsAjaxOrFetchRequest(this HttpRequestBase request)
    {
        if (request != null && request.Headers != null)
        {
            if (request.Headers["Custom-Fetch-Header"] != null)
            {
                return true;
            }
        }

        return request.IsAjaxRequest();
    }

是否有一个标头,fetch会发送所有请求,例如Request.Headers["X-Requested-With"] == "XMLHttpRequest" ajax发送?

单步执行代码,我无法看到任何突出的内容

1 个答案:

答案 0 :(得分:2)

好好再深入研究一下,我似乎无法找到任何与请求一起发送的标准标题,因此我创建了自己的标题:

public static bool IsAjaxOrFetchRequest(this HttpRequestBase request)
{
    if (request != null && request.Headers != null)
    {
        if (request.Headers["X-Is-Ajax-Request"] != null)
        {
            return bool.Parse(request.Headers["X-Is-Ajax-Request"]);
        }
    }

    return request.IsAjaxRequest();
}

然后我可以用以下内容更新我的扩展程序:

function auth(id) {
     return ((dispatch) => async1(10)
               ).then( (v) => dispatch(AddArtist(v))
               ).then( () => 
                 Promise.all([
                    async2(26),
                    async3(51),
               ])
              ).then( (v) => dispatch(AddArtist(v[0] + v[1])) 
             )
      )
}