C# C MVC检测是否存在XMLHttpRequest

C# C MVC检测是否存在XMLHttpRequest,c#,C#,我已经在我的C控制器中尝试了以下操作 使用了以下名称空间 using System; using System.Web; using System.Web.Mvc; IActionResult创建方法中的以下内容 它们都不适合我。我可以调试请求,但找不到任何东西告诉我这是一个xhr或XMLHttpRequest 我这样调用控制器操作: function reqListener () { console.log(this.responseText); } var oReq = n

我已经在我的C控制器中尝试了以下操作

使用了以下名称空间

 using System;
 using System.Web;
 using System.Web.Mvc;
IActionResult创建方法中的以下内容

它们都不适合我。我可以调试请求,但找不到任何东西告诉我这是一个xhr或XMLHttpRequest

我这样调用控制器操作:

function reqListener () {
    console.log(this.responseText);
}

var oReq = new XMLHttpRequest();
oReq.addEventListener("load", reqListener);
oReq.open("GET", "https://localhost:5001/Movies/Create");
oReq.send();
// C# needs the line:
public IActionResult Create()
    {
        ViewData["xmlHttpRequest"] = false;
        if (HttpContext.Request.Headers["X-Requested-With"] == "XMLHttpRequest") {
            ViewData["xmlHttpRequest"] = true;
        }

        return View();
    }


// and javascript like so:
function reqListener () {
  console.log(this.responseText);
}

var oReq = new XMLHttpRequest();
oReq.addEventListener("load", reqListener);
oReq.open("GET", "https://localhost:5001/Movies/Create");
oReq.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); // this is the only new line
oReq.send();
浏览器开发工具告诉我这是一个XHR类型的请求:


如何在C控制器或.cshtml文件中检测XHR请求?

您没有导入扩展名AjaxRequestExtensions。这就是第一行出现错误的原因

Request.IsAjaxRequest;//这行代码告诉我HttpRequest没有 包含IsAjaxRequest.的定义。。你是不是错过了一场比赛 指令


您可以执行以下操作:

    // GET: Movies/Create
    public IActionResult Create()
    {
        string requestedWith = HttpContext.Current.Request.Headers["X-Requested-With"];

        if(requestedWith == "XMLHttpRequest")
        {
           // Do whatever you want when an AJAX request comes in here....
        }

        return View();
    }

请注意,在现实中,检测AJAX请求没有万无一失的方法——X-Requested-With头可以选择由开发人员或客户端库(如jQuery)发送。因此,不能保证发送此标头,当然,除非您是唯一使用此服务的客户端代码的开发人员。对于服务器来说,AJAX请求与任何其他类型的请求没有任何区别。

正如Byron Jones在《我需要设置我自己》一书中指出的那样,如果您遵循链接,您将看到它只需添加

oReq.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
更新了我的问题代码如下:

function reqListener () {
    console.log(this.responseText);
}

var oReq = new XMLHttpRequest();
oReq.addEventListener("load", reqListener);
oReq.open("GET", "https://localhost:5001/Movies/Create");
oReq.send();
// C# needs the line:
public IActionResult Create()
    {
        ViewData["xmlHttpRequest"] = false;
        if (HttpContext.Request.Headers["X-Requested-With"] == "XMLHttpRequest") {
            ViewData["xmlHttpRequest"] = true;
        }

        return View();
    }


// and javascript like so:
function reqListener () {
  console.log(this.responseText);
}

var oReq = new XMLHttpRequest();
oReq.addEventListener("load", reqListener);
oReq.open("GET", "https://localhost:5001/Movies/Create");
oReq.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); // this is the only new line
oReq.send();
声明

XMLHttpRequest方法setRequestHeader设置HTTP的值 请求头。使用setRequestHeader时,必须在 正在调用open,但在调用send之前。如果调用此方法 使用同一标题多次将值合并为一个 单请求头


查看链接以了解更多信息。

我首先查看浏览器开发人员工具出站请求,以验证您使用的ajax库是否确实发送了X-request-With-headeral。因此,XMLHttpRequest的文档是一个良好的开端@Daniel Type说xhr@RomanMik这正是我从中获得代码片段的地方。问题不在于浏览器!我不知道如何在服务器端对此做出反应新的HttpRequestWrapperSystem.Web.HttpContext.Current.Request.IsAjaxRequest有什么错误?如何导入AjaxRequestExtensions?抱歉,您不必导入它,应该已经在System.Web.Mvc中了。您使用的是什么版本的MVC。我刚刚用MVC 5进行了测试,它就在那里。我所能找到的都是框架:{name:Microsoft.AspNetCore.App,version:2.2.0}我一直在关注,所以它应该是新的,但找不到任何与MVC相关的ASP.NET Core应用程序版本。请看这篇文章,谢谢您的帮助,同样的链接在10小时前就已经出现了。在这个问题上,大家好,谢谢你们的回答。我没时间早点再谈这个了。如果我尝试这样做,我会得到:HttpContext不包含Current@caramba确保您使用的是System.Web,并使用System.Web.HttpContext.Current.Request.Headers[X-Requested-With]为什么X-Requested-With而不是我的答案中的XMLHttpRequest?@caramba确实可以随意命名标题,X-Requested-With只是描述发出请求的客户端的头的标准名称。如果您喜欢XMLHttpRequest,那就试试吧。我的评论的重要部分是确保使用System.Web预先添加HttpContext,如图所示。