C# MVC detect if XMLHttpRequest
我在我的控制器中尝试了以下方法
使用了以下命名空间
1 2 3 | using System; using System.Web; using System.Web.Mvc; |
以及在
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | // GET: Movies/Create public IActionResult Create() { Request.IsAjaxRequest(); // this line tells me"HttpRequest does not contain a defintion for IsAjaxRequest .. (are you missing a using directive?)" string method = HttpContext.Request.Method; string requestedWith = HttpContext.Request.Headers["X-Requested-With"]; HttpContext.Request.Headers["X-Requested-With"] =="XMLHttpRequest"; new HttpRequestWrapper(System.Web.HttpContext.Current.Request).IsAjaxRequest() return View(); } |
他们都不适合我。我可以调试请求,但我找不到任何东西告诉我这是一个
我这样叫控制器动作:
2浏览器开发工具告诉我这是一个XHR类型的请求:
如何在C控制器或
您可以执行以下操作:
1 2 3 4 5 6 7 8 9 10 11 12 | // 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请求没有万无一失的方法——开发人员或客户端库(如jquery)可以选择发送
正如拜伦·琼斯在回答中指出的那样,我需要自己设置mlhttpRequest.setRequestHeader(),如果你按照链接操作,你会发现它很简单,只需添加
1 | oReq.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); |
所以从问题中更新了我的代码,比如:
2从文件中可以看出
The XMLHttpRequest method setRequestHeader() sets the value of an HTTP
request header. When using setRequestHeader(), you must call it after
calling open(), but before calling send(). If this method is called
several times with the same header, the values are merged into one
single request header.
有关详细信息,请访问链接。
您没有导入扩展名AjaxRequesteXTensions。这就是第一行出现错误的原因
0