it-swarm.com.ru

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

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

25
DotnetDude

Вы можете создать свой собственный метод расширения, очень похожий на метод в коде 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"));
}

HTHS,
Чарльз

Edit: На самом деле запросы обратного вызова также являются 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");
    }
45
Charlino

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

ScriptManager.GetCurrent(Page).IsInAsyncPostBack
4
Rango

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

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

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

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

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

1
devrooms

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

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

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

0
Jackboys