Estoy creando un mecanismo de bloqueo para algunas páginas públicas que solo debería permitir a un usuario editarlas al mismo tiempo. El cliente realiza llamadas a la API GET al servidor que solicita un bloqueo, que devuelve un objeto MVC ActionResult. Por alguna razón, cuando estoy ejecutando el programa localmente y devuelvo un new HttpConflictResult("Cannot acquire lock", message);
(lo que indica que no se pudo adquirir el bloqueo), funciona bien. El mensaje de error se envía y recibe correctamente y se puede mostrar en una alerta o lo que sea necesario. Sin embargo, cuando accedo al sitio de forma remota, el mensaje se sobrescribe con "La página no se mostró porque hubo un conflicto". ¿Estoy haciendo algo mal o es esto una 'Característica' de IIS o algo así? Si es así, ¿hay una forma de evitarlo para poder recibir el mensaje que quiero para el cliente?La respuesta de falla de HTTP sobrescribe el cuerpo de respuesta para clientes no locales
¡Gracias de antemano por cualquier ayuda!
EDITAR: Perdón, olvidé que HttpConflictResult era una clase heredada. Aquí hay un poco de información:
public class HttpConflictResult : HttpErrorResult
{
public HttpConflictResult() : this(string.Empty) { }
public HttpConflictResult(string errorMessageResource) : this("Conflict", errorMessageResource, true) { }
public HttpConflictResult(string statusMessage, string errorMessage) :
base(409, statusMessage, errorMessage) { }
}
public class HttpErrorResult : ActionResult
{
protected int _statusCode;
protected string _statusMessage;
protected string _errorMessage;
public HttpErrorResult(int statusCode, string statusMessage, string errorMessageResource)
{
_statusCode = statusCode;
_statusMessage = statusMessage;
_errorMessage = errorMessage;
}
public override void ExecuteResult(ControllerContext context)
{
context.HttpContext.Response.StatusCode = _statusCode;
context.HttpContext.Response.StatusDescription = _statusMessage;
if(_errorMessage != null)
{
context.HttpContext.Response.ContentType = "application/json; charset=utf-8";
context.HttpContext.Response.Clear();
System.Web.Script.Serialization.JavaScriptSerializer ser = new System.Web.Script.Serialization.JavaScriptSerializer();
context.HttpContext.Response.Write(ser.Serialize(new { message = _errorMessage }));
}
}
}
Avísame si me dejo algo más. ¡Gracias de nuevo!
Erm, ¿se puede explicar sobre 'HttpConflictResult'? ¿Y cómo lo llamas? –
está enviando un código de error. IIS va a escribir el mensaje para protegerte. Tendrá que configurar IIS. No recuerdo lo que necesita para cambiar ATM –