Подтвердить что ты не робот

Как установить код состояния 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

4b9b3361

Ответ 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);