Les appels ajax jQuery ne fonctionnent pas avec ASP.Net Web Forms lorsque FriendlyUrls est ajouté

Le code suivant fonctionne parfaitement si FriendlyUrls n’est pas activé pour un projet ASP.Net Web Forms:

 $(document).ready(function () { $.ajax({ url: '/Default.aspx/GetData', type: 'POST', beforeSend: function( xhr ) { xhr.setRequestHeader("Content-type", "application/json; charset=utf-8"); }, success: function (result) { var resultData = (result.d? result.d : result); alert(resultData); }, error : function(){ alert('error'); } }); });  

Voici le code côté serveur pour la méthode de la page (WebMethod):

 [System.Web.Services.WebMethod] public static ssortingng GetData() { return "Hello"; } 

Lorsque je charge la page dans le navigateur, la réponse s’affiche sous la forme { "d" : "Hello" } , ce qui correspond au résultat attendu.

Désormais, si les URL conviviales sont ajoutées à l’aide du package NuGet Microsoft.AspNet.FriendlyUrls , le même code ne fonctionnera pas. Lorsque FriendlyUrls est activé, j’ai modifié l’URL de l’appel jquery ajax en “/ Default / GetData” , mais je ne recevais pas le résultat attendu. Je reçois plutôt le code HTML de la page Default.aspx.

J’ai du mal à comprendre pourquoi cela ne fonctionnerait pas, la seule chose que j’ai modifiée a été l’ajout du paquet de pépites pour les FriendlyUrls!

J’ai essayé de trouver des solutions et les réponses les plus lisibles que j’ai pu trouver étaient:

Utilisation de jQuery pour AJAX avec les formulaires Web ASP.NET

http://encosia.com/using-jquery-to-directly-call-aspnet-ajax-page-methods/

Notez que tous les messages liés dans les réponses données n’utilisent pas FriendlyUrls. J’ai également vu des réponses indiquant que les appels jQuery ajax fonctionneraient correctement avec MVC, WebAPI, mais mon projet est limité à l’utilisation de formulaires Web ASP.Net.

Est-ce que je fais quelque chose de mal ou manque quelque chose ici? Est-ce que quelqu’un a rencontré le même scénario pour son projet? Si oui, pouvez-vous s’il vous plaît expliquer comment cela peut être résolu? Merci beaucoup d’avoir pris le temps de lire et de répondre.

Après avoir passé beaucoup trop de temps là-dessus, j’ai découvert qu’il me fallait changer cela dans App_Start / RouteConfig.cs:

 //settings.AutoRedirectMode = RedirectMode.Permanent; settings.AutoRedirectMode = RedirectMode.Off; 

Donc, finalement, j’ai trouvé la solution à ma question en apportant les modifications suivantes à mon projet:

  1. Ajoutez FriednlyUrls au projet.

  2. Supprimez la ligne dans la méthode RegisterRoutes qui définit la propriété settings.AutoRedirectMode dans App_Start / RouteConfig.cs

    (notez que le régler sur RedirectMode.Permanent ou RedirectMode.Off ne fonctionnait PAS pour moi)

  3. Ajoutez l’ autorisation dans web.config comme suit dans la section system.web

        
  4. Modifiez l’URL dans l’appel ajax configuré pour utiliser la fonction Microsoft.AspNet.FriendlyUrls.Resolve afin d’obtenir l’URL correcte comme ci-dessous:

      
 public static class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { var settings = new FriendlyUrlSettings(); //Esta wea se deshabilita para que funcione ajax autocomplete. //settings.AutoRedirectMode = RedirectMode.Permanent; settings.AutoRedirectMode = RedirectMode.Off; routes.EnableFriendlyUrls(settings); } }