tipos respuesta para pagina not métodos method lista estados estado errores error detallado códigos codigos codigo codes code allowed asp.net-mvc-3 iis-7.5

asp.net mvc 3 - para - IIS que sobrescribe el texto de respuesta HTTP cuando el estado de respuesta HTTP se establece en 400



respuesta http 401 (4)

Estoy construyendo una aplicación MVC 3 con un backend IIS 7.5. En mi controlador, tengo métodos de acción que permiten al usuario agregar / editar objetos de dominio. La acción maneja la publicación HTTP, tiene un valor de retorno de cadena que contiene los mensajes de error de validación encontrados durante el proceso de guardado. Aquí hay un ejemplo de un Método de Acción:

[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(); }

En el caso de un error, necesito establecer la propiedad Response.StatusCode en un valor de 400/500 y devolver una cadena concatenada de mensajes de error detallados. Desafortunadamente, IIS siempre elimina mi cadena de error de la prueba de respuesta y (en el caso de 400 errores) agrega la reemplaza con la cadena ''Solicitud incorrecta''.

¿Hay alguna manera de configurar IIS para que devuelva una cadena personalizada específica de Acción cuando el código de estado está establecido en 400?


En MVC también es posible hacer esto en una acción por acción. Ver TrySkipisCustomErrors .

Utilizar:

Response.TrySkipIisCustomErrors = true; Response.StatusCode = (int)HttpStatusCode.BadRequest; return this.Json(SomeJsonObject); // could output string too


Después de hablar con un amigo mío que es un experto en la configuración de IIS, descubrí que en IIS 7+ puede agregar lo siguiente a web.config:

<system.webServer> <httpErrors errorMode="Detailed"/> </system.webServer>

Si se usa esta configuración en web.config, Y configura el cuerpo de la respuesta, entonces el cuerpo de la respuesta llegará al cliente. Si NO establece el cuerpo de la respuesta, IIS publicará una página de error detallada con información detallada del error (consulte http://learn.iis.net/page.aspx/267/how-to-use-http-detailed- errors-in-iis / ). Muchas personas consideran que esto es un riesgo para la seguridad, por lo que debe usarse con precaución.


terminamos yendo por

<system.webServer> <httpErrors errorMode="Custom" existingResponse="PassThrough"> </system.webServer>

en la web.config. Lo cual permitía que los errores personalizados que configuraban códigos de estado dejaran IIS sin molestar.


Al menos la página Configuración de respuestas de error HTTP en IIS 7 dice

Nota

No puede personalizar los siguientes mensajes de error HTTP: 400, 403.9, 411, 414, 500, 500.11, 500.14, 500.15, 501, 503 y 505.

EDITAR: aunque en las respuestas de esta pregunta , que se ve bastante similar, hay una respuesta que afirma que al menos se puede hacer algo con la configuración de httpErrors.