28

I tried the Request.IsAjaxRequest but this does not exist in WebForms. I am making a JQuery ajax call. How do I check if this is a ajax request or not in C#?

6 Answers 6

51

You could create your own extension method much like the one in the MVC code

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: Actually Callback requests are also ajax requests,

    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");
    }
Sign up to request clarification or add additional context in comments.

2 Comments

That last line can be refactored to return request["X-Requested-With"] == "XMLHttpRequest" || request.Headers["X-Requested-With"] == "XMLHttpRequest";
added is callback support
5

Try to check if the ScriptManager IsInAsyncPostBack :

ScriptManager.GetCurrent(Page).IsInAsyncPostBack

2 Comments

Does this work for ajax requests that are triggered both from jquery ajax as well as from controls such as Update panels?
I'm not sure, therefore i wrote try;-)
4

Generally, you will need to test for the X-Requested-With header, ensuring that its value is 'XMLHttpRequest'. I'm not a C# developer (yet), but a quick google search says that in C# it goes something like this:

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

Comments

1

Yes, Request.IsAjaxRequest looks at the headers and the querystring for X-Requested-With, but it seems your jquery isn't sending the X-Requested-With header.

You can try and see what headers it is sending by using Fiddler, or alternatively just send it in the querystring by setting the POST url to

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

2 Comments

JQuery is sending the X-Requested-With so if I check the headers per Karim79, it works. But there Request does not have a IsAjaxRequest property in the base page.
Ah, I see - i thought you meant it was always false. What version of ASP.net are you using, and could we all see some code to reproduce your issue?
0

I created an extension that I use:

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

Comments

-1

Decorate your class with [WebMethod(EnableSession = true)]syntax like if you write the following function in code behind and call the same function from ajax call you will be sure.

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

in Ajax URL be like URL :'/Codebehind.aspx/getData'

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.