Как проверить, является ли запрос ajax или нет в codebehind - ASP.NET Webforms - PullRequest
26 голосов
/ 09 декабря 2010

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

Ответы [ 6 ]

46 голосов
/ 09 декабря 2010

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

Например,

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

HTH,
Charles

Редактировать: На самом деле запросы обратного вызова также являются 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");
    }
4 голосов
/ 09 декабря 2010

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

ScriptManager.GetCurrent(Page).IsInAsyncPostBack
3 голосов
/ 09 декабря 2010

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

Request.Headers["X-Requested-With"] == "XMLHttpRequest";
1 голос
/ 09 декабря 2010

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

Вы можете попробовать и посмотреть, какие это заголовкиотправка с использованием Fiddler или, в качестве альтернативы, просто отправьте его в строке запроса, установив для POST url значение

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

0 голосов
/ 12 апреля 2019

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

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)));
}
0 голосов
/ 03 августа 2016

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

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

в Ajax URL будет похож на URL :'/Codebehind.aspx/getData'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...