J’ai essayé le Request.IsAjaxRequest
mais cela n’existe pas dans WebForms. Je passe un appel JQuery ajax. Comment puis-je vérifier s’il s’agit d’une demande ajax ou non en C #?
Vous pouvez créer votre propre méthode d’extension, un peu comme celle du code MVC.
Par exemple
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
Edit: En réalité, les demandes de rappel sont également des demandes 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"); }
Essayez de vérifier si le ScriptManager IsInAsyncPostBack :
ScriptManager.GetCurrent(Page).IsInAsyncPostBack
En règle générale, vous devrez tester l’en X-Requested-With
tête X-Requested-With
, en vous assurant que sa valeur est ‘XMLHttpRequest’. Je ne suis pas encore un développeur C #, mais une recherche rapide dans Google indique qu’en C #, cela ressemble à ceci:
Request.Headers["X-Requested-With"] == "XMLHttpRequest";
Oui, Request.IsAjaxRequest
examine les en-têtes et la chaîne de requête pour X-Requested-With
, mais il semble que votre jquery n’envoie pas l’en X-Requested-With
tête X-Requested-With
.
Vous pouvez essayer de voir quels en-têtes il envoie en utilisant Fiddler, ou simplement l’envoyer dans la chaîne de requête en définissant l’URL du POST sur
/whatever.aspx?x-requested-with=XMLHttpRequest
Décorez votre classe avec la syntaxe [WebMethod(EnableSession = true)]
comme si vous écrivez la fonction suivante dans le code derrière et appelez la même fonction depuis un appel ajax, vous en serez sûr.
[WebMethod(EnableSession = true)] public static void getData(ssortingng JSONFirstData,ssortingng JSONSecondData, ssortingng JSONThirdData, ssortingng JSONForthData, ...) { //code }
dans Ajax, l’URL ressemble à l’ URL :'/Codebehind.aspx/getData'