【问题标题】:From server, how recognize javascript fetch() call was made (asp.net mvc)从服务器,如何识别 javascript fetch() 调用(asp.net mvc)
【发布时间】:2019-07-29 18:52:19
【问题描述】:

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

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

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

Request.IsAjaxRequest();

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

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

是否有类似 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);
        });

【问题讨论】:

  • 您想区别对待fetch$.ajax 吗?还是您希望它们在服务器上的行为相同?
  • 我希望IsAjaxRequest 具有相同的行为,不是这样吗?或者您是否也想区分$.ajax()fetch()?为什么你还需要知道这个?
  • IsAjaxRequest() 不会为 fetch() 请求返回 true,这就是我发布问题的原因。至于“为什么”,我需要知道以便我知道如何处理错误。我最初是这样问的,但我意识到我包含了太多信息:stackoverflow.com/questions/55048830/…
  • 你的意思是像app.get('/MyDomain/MyControllerAction', function(req, res) {

标签: javascript asp.net-mvc fetch-api


【解决方案1】:

来自this answerIsAjaxRequest 检查由$.ajax 设置的特定HTTP 标头。要让IsAjaxRequestfetch返回true,请在您提出请求时设置此标头,如下所示:

fetch('/MyDomain/MyControllerAction', { headers: { 'X-Requested-With': 'XMLHttpRequest' } })

有关fetch 选项的完整列表,请参阅MDN

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-29
    • 2021-10-31
    • 2011-01-16
    • 2014-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多