Sto lavorando al progetto MVC 4.Come restituire l'oggetto JSON quando Richiesta non valida MVC
Ho un'azione che viene eseguita quando la richiesta Ajax Post è terminata.
In alcuni casi, che ho potuto determinare esattamente, devo impostare la proprietà Status
del Response
dell'oggetto HttpBadRequest
valore, e RETURN oggetto JSON che contiene alcuni dati per mostrare all'utente finale.
il problema è che NON posso ricevere l'oggetto JSON nel metodo javascript, Sto recuperando qualcos'altro. e questo perché sto impostando la proprietà Status della risposta al valore HttpBadRequest.
Ecco la Dettagli
azione
// this method will executed when some Ajax Post request.
[HttpPost]
public ActionResult Delete(int id)
{
// some code here ......
// in some case we will determine an error like this
if(error)
{
HttpContext.Response.Clear();
HttpContext.Response.TrySkipIisCustomErrors = true;
HttpContext.Response.StatusCode = (int)HttpStatusCode.BadRequest;
return Json(new
{
Message = string.Format(format, values),
Status = messageType.ToString()
});
}
}
e voglio leggere questa tornato oggetto JSON da una funzione javascript come questo
Javascript
function OnDeleteFailed(data) {
debugger;
var try1 = $.parseJSON(data.responseText);
var try2 = JSON.parse(data.responseJSON);
}
il problema è che l'oggetto JSON sarà NON compilato nella variabile data
del javascript. quando il debug del codice Javascirpt ottengo quanto segue nella data
variabile
La più strana cosa che quando elimino questa linea dalla Azione
HttpContext.Response.StatusCode = (int)HttpStatusCode.BadRequest;
poi ho ricevuto correttamente l'oggetto JSON e ho potuto leggerlo come segue
Nota: Ricevo l'oggetto JSON corretto ma, in altre funzioni Javascript. (ora sto ricevendo l'oggetto JSON sulla funzione OnDeleteSuccess
, non in OnDeleteFailed
funzione
Così il Domanda è:. Ciò che il male con il codice, quindi l'oggetto JSON non sarà ricevuto nella funzione javascript nel caso in cui Ho impostato la proprietà "StatusCode" dell'oggetto "Response" sul valore "BadRequest"
Ho cercato molto per una risposta (da ieri fino ad ora), e dopo una lunga ricerca questo è il più rilevante question per me, ma sfortunatamente la soluzione di quella domanda non ha funzionato affatto per me
Aggiornato
qui è frammento di file Web.config
che ha fissato alcuni dei httpErros
del IIS. Questo aggiornamento di rispondere per il suggerimento che la causa dell'errore verrà da questo punto
<system.webServer>
<httpErrors errorMode="Custom" existingResponse="Replace">
<remove statusCode="404" />
<error statusCode="404" responseMode="ExecuteURL" path="/Home/PageNotFound" />
</httpErrors>
</system.webServer>
saranno apprezzati Eventuali Idea.
E 'probabilmente IIS errori personalizzati che interferisce con la risposta. – haim770
@ haim770 Ho impostato qualche errore di custome nel file web.config, questo è in relazione con il mio problema –
@ haim770 Io modificherò la mia domanda per includere lo snippet del file Web.Config che contiene qualche errore personalizzato IIS –