MVC Controller возвращает неверный запрос?

Мне было интересно, можно ли вернуть плохой запрос с контентом из 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;    
    }
}

Ответы

Ответ 1

return new HttpStatusCodeResult(HttpStatusCode.BadRequest, "naughty");

Ответ 2

Установите код состояния Http для "плохого запроса" и используйте метод Content для отправки вашего контента вместе с ответом.

public class SomeController : Controller
{
    [HttpPost]
    public async Task<ActionResult> Foo()
    {
        Response.StatusCode = 400;
        return Content("Naughty");
    }
}

Ответ 4

Конечно вы можете.

Взгляните на мое действие

// 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);
}

Я думаю, что это лучшая практика

  1. для возврата HttpStatusCodeResult(HttpStatusCode.BadRequest); в случае, если пользователь не предоставил требуемое значение

  2. вернуть HttpNotFound(); в случае, если пользователь предоставил требуемое значение, но не завуалирован

надеюсь, это поможет вам

Ответ 5

Вы можете передать сообщение об ошибке второму параметру, например:

return new HttpResponseMessage(HttpStatusCode.BadRequest, "Your message here");