Подтвердить что ты не робот

Как проверить, является ли запрос ajax или нет в codebehind - ASP.NET Webforms

Я попробовал Request.IsAjaxRequest, но этого не существует в WebForms. Я делаю вызов JQuery ajax. Как проверить, является ли этот запрос ajax или нет в С#?

4b9b3361

Ответ 1

Вы можете создать свой собственный метод расширения, подобный тому, который находится в MVC code

например.

public static bool IsAjaxRequest(this HttpRequest request)
{
    if (request == null)
    {
        throw new ArgumentNullException("request");
    }

    return (request["X-Requested-With"] == "XMLHttpRequest") || ((request.Headers != null) && (request.Headers["X-Requested-With"] == "XMLHttpRequest"));
}

HTHS,
Чарльз

Изменить: Фактически запросы обратного вызова также являются запросами ajax,

    public static bool IsAjaxRequest(this HttpRequest request)
    {
        if (request == null)
        {
            throw new ArgumentNullException("request");
        }
        var context = HttpContext.Current;
        var isCallbackRequest = false;// callback requests are ajax requests
        if (context != null && context.CurrentHandler != null && context.CurrentHandler is System.Web.UI.Page)
        {
            isCallbackRequest = ((System.Web.UI.Page)context.CurrentHandler).IsCallback;
        }
        return isCallbackRequest || (request["X-Requested-With"] == "XMLHttpRequest") || (request.Headers["X-Requested-With"] == "XMLHttpRequest");
    }

Ответ 2

Попробуйте проверить, есть ли ScriptManager IsInAsyncPostBack:

ScriptManager.GetCurrent(Page).IsInAsyncPostBack

Ответ 3

Как правило, вам нужно протестировать заголовок X-Requested-With, гарантируя, что его значение равно "XMLHttpRequest". Я не разработчик С# (пока), но быстрый поиск в Google говорит, что в С# он выглядит примерно так:

Request.Headers["X-Requested-With"] == "XMLHttpRequest";

Ответ 4

Да, Request.IsAjaxRequest просматривает заголовки и запрос для X-Requested-With, но кажется, что ваш jquery не отправляет заголовок X-Requested-With.

Вы можете попробовать и посмотреть, какие заголовки он отправляет с помощью Fiddler, или же просто отправить его в querystring, установив URL POST в

/whatever.aspx?x-requested-with=XMLHttpRequest

Ответ 5

Украсьте свой класс синтаксисом [WebMethod(EnableSession = true)], например, если вы напишете следующую функцию в коде позади и вызовите ту же функцию из ajax-вызова, вы будете уверены.

[WebMethod(EnableSession = true)]
    public static void   getData(string JSONFirstData,string JSONSecondData, string JSONThirdData, string JSONForthData, ...)
    {
       //code
    }

в URL-адресе Ajax будет выглядеть как URL :'/Codebehind.aspx/getData'

Ответ 6

Я создал расширение, которое я использую:

internal static bool IsAjaxRequest(this HttpRequestMessage request)
{
    return request != null && request.Headers.Any(h => h.Key.Equals("X-Requested-With", StringComparison.CurrentCultureIgnoreCase) &&
        h.Value.Any(v => v.Equals("XMLHttpRequest", StringComparison.CurrentCultureIgnoreCase)));
}