Содержимое BadRequest веб-API ASP.NET 2

Я не получаю ожидаемое содержимое ответа от клиента, когда ресурс возвращает BadRequest.

[HttpGet]
[Route("Test", Name = "Test")]
public async Task<IHttpActionResult> Test()
{
    var result = BadRequest("test");
    return result;
}

На клиенте (см. пример hurl.it ниже) я просто получаю строку Bad Request в теле: Неверная строка запроса в содержимом

Ответ на сервере выглядит нормально: Ответ на стороне сервера

В какой-то момент он работал нормально (возвращая строки или ModelState в содержимом), и недавно мы заметили эту проблему. Я не могу придумать какие-либо недавние изменения на сервере, которые могли бы вызвать это.

Он не работает ни локально, ни при развертывании на сервере.

Его можно воспроизвести в любом ApiController в проекте.

return Ok("test"); работает как положено.

Кто-нибудь знает, что может вызвать такое поведение?

Благодарю вас!


person paschka76    schedule 15.07.2015    source источник
comment
Получаете ли вы правильный ответ в формате json/xml? Что произойдет, если вы получите действительный запрос? Как это получается? Пожалуйста, подтвердите, вы действительно намерены делать авторизованные запросы?   -  person CularBytes    schedule 16.07.2015
comment
Именно эту проблему я и пытался описать: вместо ожидаемого контента в любом формате (в приведённом мной примере — строка test) я получаю строку Bad Request. Что касается получения 200 OK, как описано, я вижу ожидаемое содержимое (строка test).   -  person paschka76    schedule 16.07.2015
comment
Что ж, сэр, у вас есть очень приятная ошибка, которую нужно исправить :), у вас есть несколько вариантов: попробуйте с пустым проектом, посмотрите, работает ли он. Если это сработает, то вы знаете, что речь идет о вашем проекте, а не о вашем локальном IIS или сервере (крайне маловероятно, но все же попробуйте..) Попробуйте разные заголовки (application/json) без аутентификации. Это все, что у меня есть, удачи.   -  person CularBytes    schedule 16.07.2015
comment
Когда я создаю новый проект, все работает так, как ожидалось. Играл с разными типами контента - не повезло. Заголовки аутентификации ничего не меняют :(   -  person paschka76    schedule 16.07.2015
comment
Ну, мы сузили его до вашего проекта, проверьте ваш App_Start (Bundle, Route, Filter, WebApi) и Global.aspx на наличие каких-либо странных различий (фильтров?). Возможно, ваш web.config содержит пользовательские ошибки? Попробуйте запрос POST, PUT, DELETE, то же самое? -› Должны быть настройки конфига или разные версии сборок. Как насчет других ответов об ошибках 400 или 500? Удалить маршрут? Бензина тут мало :)   -  person CularBytes    schedule 17.07.2015
comment
Большое спасибо за подсказку! Это действительно было вызвано пользовательскими ошибками!   -  person paschka76    schedule 20.07.2015


Ответы (1)


Трудно сказать, что идет не так.

Что вы можете проверить:

  • Возможно, ваша ошибка вызвана неверным запросом аутентификации
  • Попробуйте с новым проектом, если это имеет значение, тогда вы знаете, что это ваш проект, и нет ошибок, вызванных вашими локальными настройками IIS и сервера (крайне маловероятно, но вы никогда не знаете.
  • Проверьте папку App_Start, содержащую файлы BundleConfig, RouteConfig, FilterConfig,WebApiConfig`. Возможно, некоторые пользовательские настройки вызвали ошибку неправильного запроса, хотя это может быть ошибка не найдена.
  • Проверьте, если это только в запросе Get или также в других, может быть вызвано разными версиями сборок.
  • Проверьте, у вас проблема только с 400, или на 401, 500 такая же проблема?
  • Проверьте свой файл Web.Config, он может содержать <CustomErrors>, которые могут перенаправлять или выдавать собственные ошибки.

После некоторых комментариев проблема заключалась в пользовательских ошибках.

person CularBytes    schedule 20.07.2015