2012-04-18 5 views
1

Я исследовал, как проверить, отправлен ли запрос через AJAX на C#, но он, похоже, не работает для меня. Мой код ниже. Я использую метод для AJAX для страницы на клиентских компьютерах (в моем случае используется activeXobject). Страница ajaxed проверяет запрос свойств ajax serverside, но ни одно из свойств X-Requested-With ничего не возвращает (я получаю пробелы при распечатке). Идеи?Проверить для Ajax Request

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 Войти Check (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). –

+0

@Scott Это всего лишь небольшая дополнительная проверка. Если запрос имеет значение NULL, возникает проблема, поэтому я перехожу вперед и перехожу к моей странице ошибок ajax. – steventnorris

+1

Я вижу, что это закомментировано. Я предполагаю, что там было еще что-то, что вы тоже удалили. Просто произнесите b/c в соответствии с тем, что у вас там, если (если req == null' переходит в 'resp.Write (req [" X-Requested-With "] ...' часть вашего кода и будет выдавать ошибку. –

ответ

2

Ваш запрос на стороне клиента не предоставляет какой-либо "X-Requested-With" заголовка или запроса параметра ваш сервер автоматически (но некоторые фреймворки, такие как Microsoft AJAX). Вызов AJAX работает, как и любой HTTP-запрос, для добавления некоторых заголовков:

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

Итак, нет собственного способа проверить запрос AJAX без установки заголовков самостоятельно? – steventnorris

+0

Запрос AJAX будет использовать протокол HTTP без дополнительной информации, так же, как и изображение, сценарий или iframe. если вы хотите отслеживать запрос XHR, вам нужно «пометить» его соответствующим заголовком (или параметром, cookie, ...) – fmgp

+0

Спасибо. Я добавил информацию заголовка, и теперь он работает нормально. – steventnorris