Ответ 1
return new HttpStatusCodeResult(HttpStatusCode.BadRequest, "naughty");
Мне было интересно, можно ли вернуть плохой запрос с контентом из MVC Controller? Единственный способ, которым я смог это сделать, - это throw HttpException
, но здесь я не могу установить какой-либо контент. Пробовал этот подход, но по какой-то нечетной причине я всегда получаю ОК. Можно ли это сделать?
public class SomeController : Controller
{
[HttpPost]
public async Task<HttpResponseMessage> Foo()
{
var response = new HttpResponseMessage(HttpStatusCode.BadRequest);
response.Content = new StringContent("Naughty");
return response;
}
}
return new HttpStatusCodeResult(HttpStatusCode.BadRequest, "naughty");
Установите код состояния Http для "плохого запроса" и используйте метод Content
для отправки вашего контента вместе с ответом.
public class SomeController : Controller
{
[HttpPost]
public async Task<ActionResult> Foo()
{
Response.StatusCode = 400;
return Content("Naughty");
}
}
В дополнение к ответу @Ekk обязательно проверьте это:
ASP.NET + Azure 400 Bad Request не возвращает данные JSON
Добавьте следующую запись в свой 'web.config'.
<system.webServer> <httpErrors existingResponse="PassThrough"/> </system.webServer>
...
Конечно вы можете.
Взгляните на мое действие
// GET: Student/Details/5
public ActionResult Details(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Student student = db.Students.Find(id);
if (student == null)
{
return HttpNotFound();
}
return View(student);
}
Я думаю, что это лучшая практика
для возврата HttpStatusCodeResult(HttpStatusCode.BadRequest);
в случае, если пользователь не предоставил требуемое значение
вернуть HttpNotFound();
в случае, если пользователь предоставил требуемое значение, но не завуалирован
надеюсь, это поможет вам
Вы можете передать сообщение об ошибке второму параметру, например:
return new HttpResponseMessage(HttpStatusCode.BadRequest, "Your message here");