Come verificare se la richiesta è ajax o non nel codebehind ASP.NET Webforms

Ho provato il Request.IsAjaxRequest ma questo non esiste in WebForms. Sto facendo una chiamata ajax JQuery. Come faccio a controllare se questa è una richiesta ajax o non in C#?

InformationsquelleAutor DotnetDude | 2010-12-08



6 Replies
  1. 46

    È possibile creare il proprio metodo di estensione molto simile a quella che nel MVC codice

    E. g.

    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,

    Charles

    Edit: in Realtà le richieste di Richiamata sono anche le richieste 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");
        }
    • Che l’ultima riga può essere rielaborato return request["X-Requested-With"] == "XMLHttpRequest" || request.Headers["X-Requested-With"] == "XMLHttpRequest";
    • quanto freddo è resharper 😉
    • aggiunto il supporto di callback
  2. 4

    Provare a controllare se il ScriptManager IsInAsyncPostBack :

    ScriptManager.GetCurrent(Page).IsInAsyncPostBack
    • Fa questo lavoro per le richieste ajax che vengono attivati sia dall’ajax di jquery nonché dai controlli come pannelli di Aggiornamento?
    • Non sono sicuro, quindi ho scritto try😉
  3. 3

    In genere, è necessario verificare l’ X-Requested-With intestazione, assicurando che il suo valore è ‘XMLHttpRequest’. Io non sono uno sviluppatore C# (ancora), ma una rapida ricerca su google dice che in C# va qualcosa come questo:

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

    Sì, Request.IsAjaxRequest guarda le intestazioni e il querystring per X-Requested-With, ma sembra che jquery non invia il X-Requested-With intestazione.

    Si può provare e vedere che cosa le intestazioni di invio utilizzando il Violinista, o, in alternativa, basta inviare in querystring impostando l’url POST di

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

    • JQuery è l’invio di X-Richiesto-Con così posso controllare le intestazioni per Karim79, funziona. Ma c’Richiesta non dispone di un IsAjaxRequest proprietà nella pagina di base.
    • Ah, vedo – ho pensato che significava che era sempre false. Che versione di ASP.net stai usando, e potremmo vedere un po ‘ di codice per riprodurre il tuo problema?
  5. 0

    Decorare la vostra classe con [WebMethod(EnableSession = true)]sintassi come se scrivere la seguente funzione in codice dietro e chiamare la stessa funzione chiamata ajax, potete essere sicuri.

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

    in Ajax URL di essere come URL :'/Codebehind.aspx/getData'

  6. 0

    Ho creato un’estensione che uso io:

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

Lascia un commento