C# C MVC检测是否存在XMLHttpRequest
我已经在我的C控制器中尝试了以下操作 使用了以下名称空间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
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,如图所示。