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.
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/) –
Perché non stai utilizzando l'url completo? (a meno che non l'abbia appena rimosso per motivi di sicurezza) – gabeio