扩展 IsAjaxRequest() 以包含获取 api 请求
Extend IsAjaxRequest() to include fetch api requests
我目前正在使用 MVC5 构建一个站点,当收到 ajax 请求时,我需要提供不同的内容。
通常我们使用 jQuery 并使用 $.ajax
发出 ajax 请求,但最近我们开始使用 fetch api。但是,使用 fetch api 的请求不会像 ajax 请求一样向 MVC 注册,因此使用了错误的模板。
我考虑过自己 ajax 请求延期,但不确定 header 要检查什么:
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();
}
是否有一个 header 与 Request.Headers["X-Requested-With"] == "XMLHttpRequest"
ajax 发送的所有请求一起发送?
单步执行代码,我看不到任何突出的地方
好的,进一步调查,我似乎找不到随请求一起发送的任何标准 header,所以我创建了自己的 header:
const request = new Request(url, {
headers: new Headers({
'X-Is-Ajax-Request': 'True'
})
});
return fetch(request)
.then(html => {
const $result = $(html);
const $content = $result.filter('.js-sidebar-panel-content');
return $content.length ? $content : $result;
});
然后我可以更新我的扩展:
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();
}
我目前正在使用 MVC5 构建一个站点,当收到 ajax 请求时,我需要提供不同的内容。
通常我们使用 jQuery 并使用 $.ajax
发出 ajax 请求,但最近我们开始使用 fetch api。但是,使用 fetch api 的请求不会像 ajax 请求一样向 MVC 注册,因此使用了错误的模板。
我考虑过自己 ajax 请求延期,但不确定 header 要检查什么:
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();
}
是否有一个 header 与 Request.Headers["X-Requested-With"] == "XMLHttpRequest"
ajax 发送的所有请求一起发送?
单步执行代码,我看不到任何突出的地方
好的,进一步调查,我似乎找不到随请求一起发送的任何标准 header,所以我创建了自己的 header:
const request = new Request(url, {
headers: new Headers({
'X-Is-Ajax-Request': 'True'
})
});
return fetch(request)
.then(html => {
const $result = $(html);
const $content = $result.filter('.js-sidebar-panel-content');
return $content.length ? $content : $result;
});
然后我可以更新我的扩展:
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();
}