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#?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
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");
}
Method 2
Try to check if the ScriptManager IsInAsyncPostBack :
ScriptManager.GetCurrent(Page).IsInAsyncPostBack
Method 3
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";
Method 4
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
Method 5
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)));
}
Method 6
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'
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0