Как установить код состояния HTTP из ASP.NET MVC 3?
Мы используем библиотеки OpenWeb js на интерфейсе, и им нужен средний уровень .NET для отправки им определенного кода состояния HTTP-заголовка при возникновении определенных типов ошибок. Я попытался добиться этого, выполнив следующее:
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);
}
Это вроде как на полпути. Смотрите скриншот:
код статуса http http://zerogravpro.com/temp/pic.png
Заметьте, что я достиг кода состояния 400 в заголовке ответа, но мне действительно нужно 400 в заголовке запроса. Вместо этого я получаю "200 OK". Как я могу достичь этого?
Моя структура URL для совершения вызова проста:/Main/TestError/400
Ответы
Ответ 1
Обсуждается расширенное обсуждение Каков правильный способ отправки ответа HTTP 404 из действия ASP.NET MVC?
Что вы хотите сделать, это установить Response.StatusCode
вместо добавления заголовка.
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);
}
Ответ 2
Если все, что вы хотите вернуть, это код ошибки, вы можете сделать следующее:
public ActionResult TestError(string id) // id = error code
{
return new HttpStatusCodeResult(id, "You broke the Internet!");
}
Ссылка: Статья MSDN на Mvc.HttpStatusCodeResult.
В противном случае, если вы хотите вернуть другую информацию, используйте
Response.StatusCode = id
вместо
Response.AddHeader("Status Code", id);