Sto costruendo un'applicazione MVC 3 con un backend IIS 7.5. Sul mio controller, ho metodi di azione che consentono all'utente di aggiungere/modificare oggetti di dominio. L'azione gestisce HTTP Post, ha un valore di ritorno di stringa che contiene tutti i messaggi di errore di convalida incontrati durante il processo di salvataggio. Ecco un esempio di un metodo di azione:IIS Sovrascrittura testo risposta HTTP quando lo stato di risposta HTTP è impostato su 400
[HttpPost]
public string CustomerEdit(CustomerModel customerModel)
{
var errorMessages = new StringBuilder();
var serverErrors = new List<string>();
//Map to a customer domain object
Mapper.CreateMap<CustomerModel, Customer>();
var customer = Mapper.Map<CustomerModel, Customer>(customerModel);
if (customerModel.Oper == "del")
{
var customerIds = new List<Guid>();
customerIds.Add(customer.Id);
if (!_serverService.DeleteCustomers(customerIds))
{
errorMessages.Append("The item could not be deleted");
Response.StatusCode = Constants.STATUS_SERVER_ERROR;
}
}
else
{
//Validate
if (!_serverService.ValidateCustomer(customer, out serverErrors))
{
foreach (var error in serverErrors)
{
ModelState.AddModelError("Validation", error);
}
}
//Save
if (ModelState.IsValid)
{
var saveStatus = _serverService.SaveCustomer(ref customer, _id);
if (!saveStatus)
{
errorMessages.Append("The server encountered and error during Save");
Response.StatusCode = Constants.STATUS_SERVER_ERROR;
}
}
else
{
errorMessages.Append(GetValidationErrors(ModelState));
Response.StatusCode = Constants.STATUS_SERVER_ERROR;
}
}
return errorMessages.ToString();
}
Nel caso di un errore, ho bisogno di impostare la proprietà Response.StatusCode ad un valore pari a 400/500, e restituire una stringa concatenata di messaggi di errore dettagliati . Sfortunatamente, IIS rimuove sempre la mia stringa di errori dal test di risposta e (nel caso di 400 errori) aggiunge la stringa con la stringa "Richiesta errata"
C'è un modo per configurare IIS per restituire un'azione personalizzata, Azione -specifica, stringa quando il codice di stato è impostato su 400?
Ho trovato un modo per farlo, per favore vedi la mia risposta per i dettagli – TheoryOfLight