2015-10-15 13 views
6

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

enter image description here

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

enter image description here

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.

+0

E 'probabilmente IIS errori personalizzati che interferisce con la risposta. – haim770

+0

@ haim770 Ho impostato qualche errore di custome nel file web.config, questo è in relazione con il mio problema –

+1

@ haim770 Io modificherò la mia domanda per includere lo snippet del file Web.Config che contiene qualche errore personalizzato IIS –

risposta

2

Nella tua Web.Config, provare a cambiare existingResponse-Auto:

<httpErrors errorMode="Custom" existingResponse="Auto"> 

Vedi Documentation

+1

In base a questa risposta: http://stackoverflow.com/a/21271085 - 'Auto' è migliore in quanto richiede" TrySkipIisCustomErrors' "e solo" Sostituisci "se non è impostato. – haim770