c# - tutorial - ¿Cómo establecer el código de estado HTTP de ASP.NET MVC 3?
mvc 4 razor tutorial español (3)
Estamos utilizando las bibliotecas js de OpenWeb en la interfaz, y ellos necesitan que el nivel intermedio .NET les envíe un código de estado de encabezado HTTP específico cuando ocurran ciertos tipos de errores. Intenté lograr eso haciendo esto:
public ActionResult TestError(string id) // id = error code
{
Request.Headers.Add("Status Code", id);
Response.AddHeader("Status Code", id);
var error = new Error();
error.ErrorID = 123;
error.Level = 2;
error.Message = "You broke the Internet!";
return Json(error, JsonRequestBehavior.AllowGet);
}
A mitad de camino funcionó. Ver captura de pantalla: código de estado http http://zerogravpro.com/temp/pic.png
Observe que logré el Código de estado de 400 en el Encabezado de respuesta, pero realmente necesito el 400 en el Encabezado de solicitud. En cambio, obtengo "200 OK". ¿Cómo puedo conseguir esto?
Mi estructura de URL para realizar la llamada es simple: / Main / TestError / 400
Hay una discusión extendida en ¿Cuál es la forma correcta de enviar una respuesta HTTP 404 desde una acción ASP.NET MVC?
Lo que quiere hacer es establecer Response.StatusCode
lugar de agregar un encabezado.
public ActionResult TestError(string id) // id = error code
{
Response.StatusCode = 400; // Replace .AddHeader
var error = new Error(); // Create class Error() w/ prop
error.ErrorID = 123;
error.Level = 2;
error.Message = "You broke the Internet!";
return Json(error, JsonRequestBehavior.AllowGet);
}
Si no puede obtener su resultado json en su vista, intente agregar esto:
Response.TrySkipIisCustomErrors = true;
Antes de esto :
Response.StatusCode = 400;
Más detalles en esta publicación: https://.com/a/37313866/9223103
Si todo lo que desea devolver es el código de error, puede hacer lo siguiente:
public ActionResult TestError(string id) // id = error code
{
return new HttpStatusCodeResult(id, "You broke the Internet!");
}
Referencia: artículo de MSDN sobre Mvc.HttpStatusCodeResult .
De lo contrario, si desea devolver otra información, use
Response.StatusCode = id
en lugar de
Response.AddHeader("Status Code", id);