C#MVC检测XMLHttpRequest


C# MVC detect if XMLHttpRequest

我在我的控制器中尝试了以下方法

使用了以下命名空间

1
2
3
 using System;
 using System.Web;
 using System.Web.Mvc;

以及在IActionResult Create()方法中的以下"事物"

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();
    }

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

我这样叫控制器动作:

2

浏览器开发工具告诉我这是一个XHR类型的请求:enter image description here

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


您可以执行以下操作:

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)可以选择发送X-Requested-With头。所以不能保证这个头会被发送,除非你是唯一使用这个服务的客户端代码的开发人员。对于服务器来说,没有什么可以区分Ajax请求和任何其他类型的请求。


正如拜伦·琼斯在回答中指出的那样,我需要自己设置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