2012-06-28 1 views
10

je le poste jQuery suivant un ASP.NET webmethod:jQuery après AJAX reçoit 405 erreur (verbe HTTP POST non autorisé)

$.ajax({ 
    type: "POST", 
    url: "AjaxWebMethods.aspx/UpdNote", 
    contentType: "application/json; charset=utf-8", 
    data: "{'ID' : '" + id + "', 'note' : '" + note + "' }", 
    dataType: "json", 
    success: UpdNote_Success, 
    error: AjaxError 
}); 

Et la méthode Web est déclarée:

[System.Web.Services.WebMethod(enableSession: true)] 
public static int UpdNote(int ID, string note) { 
    // business logic that eventually returns a number, but simplifying 
    // ... for the sake of brevity 
    int retNum = 99; 

    return retNum; 
} 

La publication jQuery et la méthode Web fonctionnent toutes les deux dans un environnement Windows authentifié (les utilisateurs sont authentifiés par LDAP). Cependant, j'ai récemment dû déplacer le site vers un serveur qui utilise RSA (authentification à deux facteurs, code PIN et jeton) pour authentifier les utilisateurs afin d'accéder au site. Et ce que je vois maintenant, c'est que tous mes messages jQuery retournent "405 error".

demandes Cross site vient à l'esprit, évidemment, mais rien de tout cela se passe ici. Tous les messages jQuery AJAX utilisent des méthodes Web déclarées dans AjaxWebMethods.aspx, qui se trouve dans le propre domaine du site.

Merci d'avance pour toute aide ou suggestion!

EDIT:

En utilisant Fiddler IE8 me donne un peu plus d'informations. Le code d'erreur renvoyé est toujours 405, mais l'erreur du serveur est plus descriptive. L'erreur du serveur est "Le verbe HTTP POST utilisé pour accéder au chemin" /AjaxWebMethods.aspx/UpdNote "n'est pas autorisé."

J'ai essayé de changer le paramètre de type de la requête ajax en GET, mais j'obtiens un 404 à la place (la ressource est introuvable).

En outre, oublié de mentionner que c'est sur SSL (bien que je ne pense pas que ce serait faire une différence).

EDIT:

Après des tests approfondis (et l'aide précieuse de membres astucieux de stackoverflow) J'ai déterminé que 405 erreur est liée directement à la piscine demande que le site utilise, et plus particulièrement le mode Pipeline géré sélectionné pour le pool d'applications. Si j'utilise un pool d'applications qui cible v4.0 (.NET Framework) et Integrated (mode Pipeline géré), mon post AJAX fonctionne correctement. Mais si j'utilise un pool d'applications qui cible les versions 4.0 et Classic (mode pipeline géré), j'obtiens l'erreur 405.

Donc, à ce stade, je suis toujours à la recherche d'une solution à cette question, même si je suis en mesure de la maison dans le problème.

+0

Pourquoi avez-vous besoin de la déclaration 'contentType'? vous définissez le paramètre 'datatType' sur JSON et *" Les données seront toujours transmises au serveur à l'aide du jeu de caractères UTF-8, vous devez le décoder correctement côté serveur. "* Cette partie est également inutile - [API jQuery] (http://api.jquery.com/jQuery.ajax/) –

+0

Pourquoi n'utilisez-vous pas l'URL complète? (sauf si vous venez de l'enlever pour des raisons de sécurité) – gabeio

Répondre

3

Sur cette base:

Le poste jQuery et la méthode Web à la fois merveilleux travail dans un environnement Windows assermentée (c.-à - les utilisateurs sont authentifiés par LDAP). Cependant, j'ai récemment dû déplacer le site vers un serveur qui utilise RSA (authentification à deux facteurs, code PIN et jeton) pour authentifier les utilisateurs afin d'accéder au site. Et ce que je vois maintenant, c'est que tous mes messages jQuery retournent "405 error".

Il est clair que l'erreur est liée à la configuration du serveur, mais d'être complètement sûr, si vous pouvez, créer un nouveau site dans le serveur RSA et pour ce site désactiver l'authentification RSA, essayez de parcourir votre site juste pour être absolument sûr que l'erreur est uniquement liée à l'authentification RSA, en supprimant les composants/configuration liés au code manquants dans le nouveau serveur

Une fois que vous avez éliminé les problèmes de configuration liés au code, je vous encourage à doubler vérifiez votre configuration RSA (ce qui peut être difficile). Une fois que j'ai travaillé dans un projet en utilisant la sécurité RSA afin de mettre en œuvre un SSO sur les serveurs. (Single Sign On), je me souviens, il y avait un filtre ISAPI RSA installé au niveau du serveur, et ce filtre était chargé de lire/définir les cookies d'authentification afin d'authentifier chaque demande contre un serveur Active Directory.

Étant donné que chaque demande a été gérée par ce filtre et ce filtre ISAPI était au sommet de la canalisation, toutes les demandes devaient être traitées par le filtre ISAPI RSA premier afin d'être authentifié

Donc, ma suggestion est le double Je vérifie la configuration RSA pour détecter si quelque chose bloque vos messages AJAX

Je me souviens que la configuration de RSA était comme une boîte magique noire, nous n'avions pas assez de documentation et la configuration était un PITA. J'espère sincèrement que ce n'est pas le cas dans votre organisation

+0

Merci Jupaol! Vous m'avez donné des indications utiles. Je vais essayer et voir ce que je peux déterrer. Je n'ai pas configuré le RSA sur ce serveur, donc mes connaissances manquent malheureusement dans ce domaine. Mais il semblerait que je vais devoir sauter dedans et me salir les mains avec la partie RSA. – Jagd

+0

Je suis content que cela ait aidé. Juste une chose, avant de creuser dans la configuration RSA, assurez-vous que le site déployé sur le nouveau serveur fonctionne réellement sur ce serveur, créez un site sur ce serveur et modifiez l'authentification RSA pour l'authentification Windows ou autorisez simplement les utilisateurs anonymes. et assurez-vous que vos appels AJAX fonctionnent. Si c'est le cas, alors le problème sera certainement lié à la configuration RSA (le filtre ISAPI) – Jupaol

+0

Ok, j'ai configuré un nouveau site web sur le même serveur et vérifié que sans RSA cela fonctionne. Pas de RSA et pas de SSL, en utilisant juste l'authentification Windows et ça marche. Un pas de plus ... je pense. – Jagd

0

Pour résoudre ce problème, essayez de changer l'AJAX "POST" à un AJAX "GET". J'ai eu un problème légèrement similaire après avoir déplacé une page qui avait une méthode post ajax de notre environnement de développement à notre environnement de production.

+0

Merci pour la suggestion. J'ai déjà essayé, mais je n'ai pas eu de chance avec ça. – Jagd

0

HTTP 405 est une erreur serveur, pas une erreur de code, indiquant que la ressource (URL) est en cours d'accès par la mauvaise méthode. Essayez d'utiliser GET au lieu de POST.

+0

J'ai déjà essayé, mais cela n'a rien changé. – Jagd

1

Le code HTTP 405 est le code "Méthode non autorisée". Vous avez donc des paramètres incorrects dans votre nouvelle architecture. C'est certainement une mauvaise configuration du serveur. Cette erreur peut provenir d'un certain nombre d'endroits et sans accès à votre serveur, il sera difficile pour quelqu'un d'autre de vous dire ce qui se passe. Mais peut-être que je peux vous donner quelques points de départ ...Avez-vous vérifié votre web.config? Ce serait un lieu commun pour une erreur comme celle-ci.

Avez-vous vérifié vos journaux IIS? Ce serait aussi un très bon endroit pour commencer. Que se passe-t-il si vous essayez de POST sans définir le contentType de votre demande? Votre page n'est peut-être pas configurée pour recevoir des demandes JSON.

Avez-vous essayé d'utiliser Fiddler? Essayez d'envoyer la demande POST à ​​partir d'un client externe.

Mise à jour

Quelques autres suggestions:

Avez-vous essayé de désactiver SSL? Je voudrais le désactiver juste pour s'assurer que le problème n'est pas lié à SSL.

Est-ce que vous faites une réécriture d'URL? Si oui, cela pourrait certainement être lié.

Pouvez-vous POST à ​​toutes les URL avec succès? Peut-être que IIS a complètement désactivé POST. Si oui, here is an article qui pourrait vous aider à l'activer, et here is a thread qui pourrait aider aussi bien.

Avez-vous essayé d'ajouter HttpPost dans votre web.config? Quelque chose comme ceci:

<webServices> 
    <protocols> 
     <add name="HttpPost" /> 
    </protocols> 
</webServices> 
+0

Il est possible qu'il s'agisse d'une mauvaise configuration avec IIS ou RSA, mais en postant sur stackoverflow j'espérais que quelqu'un qui utilisait un scénario similaire (RSA + jQuery AJAX) pourrait me dire que ça fonctionnait pour eux et peut-être me pointer dans une direction utile. – Jagd

+0

En ce qui concerne vos autres suggestions - 1) Je ne suis pas sûr de ce que je rechercherais dans le web.config qui aurait même un impact là-dessus. Comme je l'ai dit dans la question initiale, cela fonctionne sans une authentification RSA en place, mais ne fonctionne pas lorsque RSA est en place. Cela ne m'amène pas à croire que cela a quelque chose à voir avec web.config, à moins qu'il y ait une balise obscure à définir que je ne connais pas. – Jagd

+0

a) N'a pas vérifié les journaux IIS, je vais donc essayer. b) la page est configurée pour fonctionner avec json et le fait bien jusqu'à ce que RSA soit en place. c) Oui, j'ai essayé Fiddler mais je n'ai rien apporté. De toutes les apparences, il ne semblait même pas qu'un message AJAX était envoyé au serveur lorsque j'utilisais Fiddler. – Jagd

0

Peut-être que votre serveur n'a pas les extensions ajax installées. Essayez de marquer les références à CopyLoacal = true et déployez le dossier bin sur le serveur Web.

Questions connexes