【问题标题】:Check for Ajax Request检查 Ajax 请求
【发布时间】:2012-04-18 12:29:31
【问题描述】:

我研究了如何检查是否通过 C# 中的 AJAX 发送请求,但它似乎对我不起作用。我的代码如下。我使用一种方法在客户端 AJAX 页面(在我的情况下,正在使用 activeXobject)。 ajax 页面正在检查 ajax 属性服务器端的请求,但 X-Requested-With 属性均未返回任何内容(打印时出现空白)。想法?

Ajax 方法 (Javascript)

/*
* Ajax page loads with url
* @param url : URL to call for ajax page load
* @param element : Element ID to be updated
*/
function ajax(url, element) {
    UtilLogger.log(HtmlLogger.INFO, "-AJAX Call for " + url + " in " + element + "-");
    var ajx;
    if (window.HXMLHttpRequest) {
        UtilLogger.log(HtmlLogger.FINE, "Using XMLHttpRequest");
        ajx = new XMLHttpRequest();
    }
    else {
        UtilLogger.log(HtmlLogger.FINE, "Using ActiveXObject");
        ajx = new ActiveXObject("Microsoft.XMLHTTP");
    }
    ajx.open("GET", url, true);
    ajx.send();
    ajx.onreadystatechange = function () {
        if (ajx.readyState == 4 && ajx.status == 200) {
            document.getElementById(element).innerHTML = ajx.responseText;
        }
        else if (ajx.readyState == 4 && ajx.status == 400) {
            alert("Page Error. Please refresh and try again.");
        }
        else if (ajx.readyState == 4 && ajx.status == 500) {
            alert("Server Error. Please refresh and try again.");
        }
    }
    UtilLogger.log(HtmlLogger.INFO, "-END AJAX Call for " + url + " in " + element + "-");
}

Ajax 登录检查 (C#)

/* Checks for ajax request validity
 * @param HttpResponse resp : response to redirect if not ajax request
 * @param HttpRequest req : request to check for ajax
 */
public static void checkAjax(HttpResponse resp, HttpRequest req)
{
    if(req == null || 
        (req["X-Requested-With"] != "XMLHttpRequest" && 
        (req.Headers != null && req.Headers["X-Requested-With"] != "XMLHttpRequest"))){
           // resp.Redirect("./ajaxerror.aspx");
            resp.Write(req["X-Requested-With"] + ":" + req.Headers["X-Requested-With"]);
    }
}

【问题讨论】:

  • 也许我只是遗漏了一些东西,但你为什么要检查if(req == null ||?那不应该是if(req != null &&吗?同样,也许我只是读错了(我主要是 VB 人)。
  • @Scott 这只是额外的检查。如果请求为空,则存在问题,所以我继续前进并转到我的 ajax 错误页面。
  • 我看到它被注释掉了。我想那里还有一个你也删除了的 else 。只需根据您那里的内容说 b/c if(req == null 进入代码的 resp.Write(req["X-Requested-With"]... 部分并会引发错误。
  • @Scott 哦,我明白你的意思了。是的,注释掉的 resp.redirect 是实际使用的。 resp.write 部分只是为了一些快速而肮脏的测试。

标签: c# javascript ajax httprequest


【解决方案1】:

您的客户端请求不会自动向您的服务器提供任何“X-Requested-With”标头或查询参数(但 Microsoft AJAX 等某些框架会提供)。 AJAX 调用就像任何 HTTP 请求一样工作,添加一些标头:

xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");

【讨论】:

  • 那么如果不自己设置标头,就没有本地方法来检查 AJAX 请求吗?
  • AJAX 请求将使用 HTTP 协议而无需额外信息,就像图像、脚本或 iframe 一样。如果您想跟踪 XHR 请求,您必须使用适当的标头(或参数、cookie、...)“标记”它
  • 谢谢。我已经添加了标题信息,现在可以正常工作了。
猜你喜欢
  • 2015-05-27
  • 2012-07-26
  • 1970-01-01
  • 2011-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-18
  • 2021-01-08
相关资源
最近更新 更多