MVC Controller возвращает неверный запрос?
Мне было интересно, можно ли было вернуть неверный запрос с контентом из контроллера MVC? Единственный способ сделать это - 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;
}
}
7 ответов
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 не возвращает данные 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");
Флаг TrySkipIisCustomErrors можно использовать для отключения настраиваемой обработки ошибок IIS.
[HttpGet]
public void Foo()
{
HttpContext.Response.TrySkipIisCustomErrors = true;
HttpContext.Response.StatusCode = 400;
HttpContext.Response.Write("Naughty");
}
Ответ для .Net Core: ВозвратIActionResult
как описано здесь . Например:
public IActionResult Get(int id = 0)
{
try
{
var obj = _myRepo.Get(id);
}
catch (Exception ex)
{
return BadRequest(ex.Message);
}
return Ok(obj);
}