2012-04-18 137 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