从服务器,如何识别 javascript fetch() 调用(asp.net mvc)

Tom*_*gan 2 javascript asp.net-mvc fetch-api

这不是完全重复;下面提供的答案与建议的重复答案中的评论相同。

从 asp.net 控制器操作内部,我很想知道该调用是否是由 javascript fetch() 调用进行的。我可以询问 Request 对象的任何部分以发现这一点吗?

例如,如果我想知道调用者是否是 javascript $.ajax 调用,在服务器端我可以调用这个方法:

Request.IsAjaxRequest();
Run Code Online (Sandbox Code Playgroud)

如果它返回 true 我知道调用是这样的:

       $.ajax({
        url: '/MyDomain/MyControllerAction',
        type: 'GET',
        success: function (data) {
            doSomething(data);
        },
        error: function (XMLHttpRequest, ajaxOptions, ex) {
            doSomethingElse(XMLHttpRequest, ajaxOptions, ex);
    });
Run Code Online (Sandbox Code Playgroud)

是否有类似 Request.IsAjaxRequest() 我可以调用或询问来发现调用者是否是 javascript fetch(),例如这样的调用:

fetch('/MyDomain/MyControllerAction')
       .then(function (data) {
          if(data.ok){
            return data.json();
           }
        })
        .then(function (data) {
            doSomething(data)
        })
        .catch(function (error) {
            doSomethingElseAgain(error);
        });
Run Code Online (Sandbox Code Playgroud)

p.s*_*w.g 6

这个答案中IsAjaxRequest检查由 设置的特定 HTTP 标头$.ajax。要在提出请求时IsAjaxRequest返回 true 以fetch设置此标头,如下所示:

fetch('/MyDomain/MyControllerAction', { headers: { 'X-Requested-With': 'XMLHttpRequest' } })
Run Code Online (Sandbox Code Playgroud)

请参阅MDN以获取完整的fetch选项列表。