Ho un metodo di azione di controllo che funziona quando sembra che questo:ASP MVC azione di controllo '404 non trovato' errore quando decorato con [HttpPost]
public ActionResult testMethod(int id)
{
//do something...
//return something...
return View();
}
Ma quando ho specificare che dovrebbe essere una " metodo post", ottengo un '404 non trovato errore':
[HttpPost]
public ActionResult testMethod(int id)
{
//do something...
//return something...
return View();
}
ho altri metodi di azione del controller nello stesso regolatore - sia pOST e GET, e funzionano bene. Ma questo no? Cosa sta succedendo? (Sono sicuro che mi manca qualcosa di ovvio qui ...)
Aggiornamento: Una chiamata ajax richiede il metodo controller: var id = 1;
$.ajax({
url: '/indices/testMethod/',
data: id,
type: 'POST',
success: function (data) {
//Do something
}
});
Ho anche provato a testare il metodo con Postman, assicurandomi che venga inviata una richiesta POST.
Aggiornamento 2: Ho provato a cambiare il parametro in id e ho cercato di assicurarmi che tutte le posizioni di metodo e URL fossero in maiuscolo per corrispondere, ma senza alcun effetto.
In Fiddler, vedo che in realtà viene effettuata una richiesta GET, anche se si specifica una richiesta POST nella chiamata ajax, quindi ora ho bisogno di scoprire perché la richiesta finisce per essere inviata come GET invece di un post.
Ho provato anche inclusa una descrizione del percorso di attributo, come questo
[HttpPost]
[Route("indices/TestMethod/{id:int}")]
public ActionResult TestMethod(int id)
E poi provato la chiamata AJAX con un diverso URL:
$.ajax({
url: '/indices/TestMethod/1',
data: id,
type: 'POST',
success: function (data) {
var tr = 123;
var yr = data;
//Do something
}
});
Con attributo routing, e il valore paramter in l'URL, vedo in Fiddler che per prima cosa accade una richiesta POST, che ottiene un errore di stato 301, ma poi viene fatta anche una richiesta GET, che ottiene l'errore 404.
Update 3: Dopo altre indagini ho ristretto la definizione del problema sufficientemente che aveva un senso per aprire una nuova domanda, che può essere trovato qui: ASP MVC jQuery $.ajax POST request does not call controller method, but works in "fresh" MVC project
Il problema sembra essere causato dalla politica di sicurezza contenuti impostazioni che erano attive per questo progetto.
come si tenta di contattare questa azione? – Robert
Sei sicuro che la richiesta è POST'ing all'azione, non qualche altro verbo? Installa Fiddler ed esamina i dati della richiesta. – asawyer
hanno aggiunto alcune informazioni aggiuntive - per quanto ne so, viene inviata una richiesta POST, ma non raggiunge mai il controller quando ottengo un errore 404. –