2012-04-18 87 views
1

我已经研究了如何检查请求是否通过C#中的AJAX发送,但它似乎不适用于我。我的代码如下。我使用一种方法在客户端AJAX页面(在我的情况下,正在使用activeXobject)。 ajaxed页面正在检查ajax属性serverside的请求,但是这两个X-Requested-With属性都没有返回任何内容(打印时我得到空白)。想法?检查Ajax请求

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 + "-"); 
} 

阿贾克斯登录检查(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"]); 
    } 
} 
+0

也许我只是想念一些东西,但为什么你要检查'if(req == null ||'?不应该是'if(req!= null &&''?再次,也许我只是读错了(我主要是一个VB家伙) – 2012-04-18 12:42:00

+0

@Scott这只是一个额外的检查,如果请求为空,有一个问题,所以我继续前进到我的ajax错误页面 – steventnorris 2012-04-18 12:52:00

+1

我看到那个被注释掉了,我猜那里还有其他的东西你也删除了,只是根据你在那里说的b/c if( req == null'进入你的代码的resp.Write(req [“X-Requested-With”] ...'部分,并且会抛出一个错误。 – 2012-04-18 13:52:16

回答

2

您的客户端请求不提供任何 “X-要求,以” 头或查询参数你的服务器自动(但一些框架,如Microsoft AJAX)。一个AJAX调用可以像任何HTTP请求一样工作,添加一些头文件:

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

因此,没有原生的方式来检查一个AJAX请求,而无需自己设置标题? – steventnorris 2012-04-18 12:51:15

+0

AJAX请求将使用HTTP协议,不需要额外的信息,与图像,脚本或iframe一样。如果你想跟踪XHR请求,你必须使用适当的头文件(或参数,cookie,...)来“标记”它。 – fmgp 2012-04-18 13:27:20

+0

谢谢。我添加了标题信息,现在工作正常。 – steventnorris 2012-04-18 14:32:57