2012-06-28 12 views
10

Ho il seguente post jQuery per un webmethod ASP.NET: viene dichiaratajQuery AJAX postale riceve 405 errore (HTTP verbo POST non consentito)

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

E il metodo web:

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

Il post di jQuery e il metodo web funzionano entrambi in modo ottimale in un ambiente Windows Authenticated (ad esempio, gli utenti sono autenticati da LDAP). Tuttavia, di recente ho dovuto spostare il sito Web su un server che utilizza RSA (autenticazione a due fattori, codice pin e token) per autenticare gli utenti al fine di ottenere l'accesso al sito. E quello che sto vedendo ora è che tutti i miei post di jQuery restituiscono "errore 405".

Le richieste per il cross-site mi vengono in mente, ovviamente, ma niente di tutto ciò sta succedendo qui. Tutti i post di jQuery AJAX utilizzano metodi web dichiarati in AjaxWebMethods.aspx, la cui pagina risiede nel dominio del sito.

Grazie in anticipo per qualsiasi aiuto o suggerimento!

EDIT:

Utilizzando Fiddler in IE8 mi dà un po 'più di informazioni. Il codice di errore che restituisce è ancora 405, ma l'errore del server è più descrittivo. L'errore del server è "Il verbo HTTP POST utilizzato per accedere al percorso '/AjaxWebMethods.aspx/UpdNote' non è consentito."

Ho provato a modificare il parametro di tipo della richiesta ajax su GET, ma ottengo invece un 404 (la risorsa non può essere trovata).

Inoltre, ho dimenticato di dire che questo è su SSL (anche se non mi aspetto che questo faccia la differenza).

EDIT:

Dopo numerosi test (e vasto aiuto da parte dei membri astuti di StackOverflow) Ho stabilito che 405 errore è direttamente correlato al pool di applicazioni che il sito sta usando, e più specificamente a la modalità pipeline gestita selezionata per il pool di applicazioni.

Se utilizzo un pool di applicazioni con target v4.0 (.NET Framework) e Integrated (modalità Pipeline gestita), il mio post AJAX funziona correttamente. Ma se utilizzo un pool di applicazioni che si rivolge alla versione v4.0 e classica (modalità Pipeline gestita), ottengo l'errore 405.

Quindi a questo punto sono ancora alla ricerca di una soluzione a questa domanda, anche se sono stato in grado di intervenire sul problema.

+0

Perché avete bisogno della dichiarazione 'contentType'? stai impostando 'datatType' su JSON e *" I dati saranno sempre trasmessi al server usando il set di caratteri UTF-8, devi decodificarlo in modo appropriato sul lato server. "* in modo che anche la parte non sia necessaria - [jQuery API] (http://api.jquery.com/jQuery.ajax/) –

+0

Perché non stai utilizzando l'url completo? (a meno che non l'abbia appena rimosso per motivi di sicurezza) – gabeio

risposta

3

Sulla base di questo:

Il post jQuery e il metodo web sia lavoro meraviglioso in un ambiente Windows autenticato (vale a dire - gli utenti vengono autenticati da LDAP). Tuttavia, di recente ho dovuto spostare il sito Web su un server che utilizza RSA (autenticazione a due fattori, codice pin e token) per autenticare gli utenti al fine di ottenere l'accesso al sito. E quello che sto vedendo ora è che tutti i miei post di jQuery restituiscono "errore 405".

E 'chiaro che l'errore è in relazione con la configurazione del server, ma per essere completamente sicuro, se è possibile, creare un nuovo sito nel server RSA e per questo sito disabilitare l'autenticazione RSA, provare a navigare il tuo sito solo per essere assolutamente sicuro che l'errore sia solo correlato all'autenticazione RSA, scartando componenti/configurazione relativi al codice mancanti nel nuovo server

Una volta eliminati i problemi di configurazione relativi al codice, ti incoraggio a raddoppiare controlla la tua configurazione RSA (che può essere difficile). Una volta ho lavorato in un progetto utilizzando la sicurezza RSA per implementare un SSO tra i server. (Single Sign On), ricordo che c'era un filtro ISAPI RSA installato a livello di server, e questo filtro era incaricato di leggere/impostare i cookie di autenticazione per autenticare ogni richiesta con un server Active Directory.

Dal momento che ogni richiesta è stata gestita da questo filtro e il filtro ISAPI era in cima del gasdotto, ogni richiesta doveva essere gestito dal filtro ISAPI RSA in primo luogo per essere autenticato

Quindi il mio suggerimento è doppio controlla la configurazione RSA per scoprire se c'è qualcosa che blocca i tuoi messaggi AJAX

Ricordo che la configurazione RSA era come una scatola magica nera, non avevamo abbastanza documentazione e la configurazione era una PITA. Spero sinceramente che questo non sia il caso nella vostra organizzazione

+0

Grazie Jupaol! Mi hai dato alcune indicazioni utili. Farò un tentativo e vedrò cosa posso scavare. Non ho configurato la RSA su questo server, quindi la mia conoscenza è carente in quell'arena, sfortunatamente. Ma sembra che dovrò saltare dentro e sporcarmi le mani con la porzione RSA di esso. – Jagd

+0

Sono contento che mi abbia aiutato. Solo una cosa, prima di scavare nella configurazione RSA, assicurati che il sito distribuito sul nuovo server funzioni effettivamente su quel server, per farlo, crea un sito in quel server e cambia l'autenticazione RSA per l'autenticazione di Windows o semplicemente consenti agli utenti anonimi e assicurati che le tue chiamate AJAX funzionino. Se lo fanno, allora sicuramente il problema sarà correlato alla configurazione RSA (il filtro ISAPI) – Jupaol

+0

OK, ho installato un nuovo sito Web sullo stesso server e verificato che senza RSA funziona. Nessun RSA e nessun SSL, usando solo l'autenticazione di Windows e funziona. Un passo avanti ... penso. – Jagd

0

Per la risoluzione dei problemi, provare a cambiare il "POST" AJAX in un "GET" AJAX. Ho avuto un problema leggermente simile dopo aver spostato una pagina che aveva un metodo di posta ajax dal nostro ambiente di sviluppo al nostro ambiente di produzione.

+0

Grazie per il suggerimento. Ho già provato questo, ma non ho avuto fortuna con esso. – Jagd

0

HTTP 405 è un errore del server, non un errore di codice, a indicare che la risorsa (URL) sta accedendo con il metodo sbagliato. Prova a utilizzare GET invece di POST.

+0

Provato questo, ma non ha cambiato nulla. – Jagd

1

Il codice HTTP 405 è il codice "Metodo non consentito". Quindi, hai alcune impostazioni errate nella tua nuova architettura. È certamente un errore di configurazione del server. Questo errore potrebbe derivare da un numero di punti e senza l'accesso al tuo server sarà abbastanza difficile per qualcun altro a dirti cosa sta succedendo. Ma forse posso darti dei punti di partenza ...

Avete ricontrollato il vostro web.config? Sarebbe un luogo comune per un errore come questo da cui derivare.

Avete controllato i registri IIS? Sarebbe anche un ottimo punto di partenza.

Cosa succede se si prova a POST senza impostare contentType della richiesta? Forse la tua pagina non è impostata per ricevere richieste JSON.

Hai provato a utilizzare Fiddler? Prova a inviare la richiesta POST da un client esterno.

Aggiornamento

Qualche altro suggerimento:

Hai provato disabilitando SSL? Lo disabiliterei solo per assicurarmi che il problema non sia correlato a SSL.

Stai facendo una riscrittura di URL? Se è così, questo potrebbe certamente essere collegato.

È POSSIBILE pubblicare con successo gli URL? Forse IIS ha disabilitato POST del tutto. In tal caso, here is an article che potrebbe aiutarti a abilitarlo, e here is a thread che potrebbe essere d'aiuto.

Hai provato ad aggiungere HttpPost nel tuo web.config? Qualcosa di simile:

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

È possibile che si sia verificato un errore di configurazione con IIS o RSA, ma pubblicando su StackOverflow avrei sperato che qualcuno che stava eseguendo uno scenario simile (post RSA + jQuery AJAX) potesse dirmi che funziona per loro e forse mi indica in qualche direzione utile. – Jagd

+0

Per quanto riguarda i tuoi altri suggerimenti - 1) Non sono sicuro di cosa stavo cercando nel web.config che avrebbe anche un impatto su questo. Come ho detto nella domanda originale, funziona senza un'autenticazione RSA, ma non funziona quando RSA è installato. Questo non mi porta a credere che abbia qualcosa a che fare con il web.config, a meno che non ci sia un tag oscuro che deve essere impostato di cui non so nulla. – Jagd

+0

a) Non ho controllato i registri IIS, quindi ci provo. b) la pagina è impostata per funzionare con JSON e lo fa bene fino a quando RSA è a posto. c) sì, ho provato Fiddler ma non sono venuto con niente. Da tutte le apparenze non sembrava nemmeno che fosse stato creato un post AJAX sul server quando eseguivo Fiddler. – Jagd

0

Forse il tuo server non ha installato le estensioni Ajax. Prova a contrassegnare i riferimenti a CopyLoacal = true e distribuisci la cartella bin sul server web.

Problemi correlati