Estoy luchando para resolver este problema. En mi máquina local (Win7/VS2010/IIS 7.5) y otra máquina de desarrollador idéntica, el siguiente código devuelve el código de estado 500, y el texto de respuesta dice "No se pudo ubicar al usuario con la dirección de correo electrónico especificada".¿Cómo devolver la respuesta correcta por error en ASP.NET MVC 3.0 a través de JSON?
Cuando despliego el sitio a mi servidor de prueba (Win2008 R2/IIS7.5) devuelve el código de estado correcto, pero el tipo de contenido se establece en "text/html" y responseText no contiene el mensaje.
He intentado desactivar los errores personalizados en el servidor, lo que no hizo diferencia. ¿Alguien puede detectar cuál podría ser el problema?
I tienen una forma que se configura utilizando el método AjaxHelper.BeginForm:
@using (Ajax.BeginForm("FindUser", new AjaxOptions {OnSuccess="findComplete", OnFailure="findFailed"})
{
<fieldset>
@Html.EditorFor(m => m.UserEmail)
<div class="form-item button search">
<input type="submit" value="Find"/>
</div>
<div id="find-err" class="message error hidden">
<div class="contents"></div>
</div>
</fieldset>
}
Con una manipulación javascript función de error:
function findFailed(result) {
var error = result.responseText;
if (error) {
$('#find-err .contents').text(error).slideDown();
}
}
la acción del controlador atrapa cualquier error y devuelve un mensaje:
[HttpPost]
public ActionResult FindUser(FindUserModel model)
{
try
{
// code to find user
if (user == null)
{
throw new Exception("Could not locate user with specified email address.");
}
if (Request.IsAjaxRequest())
{
return Json(new { id = user.Id, name = user.Name }, JsonRequestBehavior.AllowGet);
}
model.FoundUser = user;
return View("Details", model);
}
catch (Exception ex)
{
if (Request.IsAjaxRequest())
{
Response.StatusCode = 500;
return Json(ex.Message, JsonRequestBehavior.AllowGet);
}
ModelState.AddModelError("UserEmail", ex.Message);
return View(model);
}
}
Cualquier ayuda sería muy apreciada :)
uno de los buenos, no había considerado IIS errores personalizados conseguir en el camino. My HandleErrorsAttribute establece TrySkipCustomErrors, pero al devolver el estado directamente con una respuesta JSON, no lo estaba configurando. –