1

リクエストがC#でAJAX経由で送信されているかどうかを確認する方法を調べましたが、うまくいかないようです。私のコードは以下の通りです。クライアント側でページをAJAXするメソッドを使用します(私の場合、activeXobjectが使用されています)。ajaxedページはサーバーサイドの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"]);
    }
}
4

1 に答える 1

2

クライアント側のリクエストは、サーバーに「X-Requested-With」ヘッダーまたはクエリパラメーターを自動的に提供しません(ただし、Microsoft AJAXなどの一部のフレームワークは提供します)。AJAX呼び出しは、他のHTTPリクエストと同じように機能し、いくつかのヘッダーを追加します。

xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
于 2012-04-18T12:45:41.393 に答える