Y>>ArgumentException подходит только для самых простых проверок, типа должен прийти емейл, а неожиданно пришёл какой-то мусор. Такие неожиданные исключения можно трактовать наравне с аналогичными
НС>Почему 500? 400 означает, что проблема с переданными данными, 500 что это внутренняя проблема сервиса, на которую клиент повлиять не в состоянии. В описанном кейсе проблема именно в переданных данных.
Согласен. Лично я вообще против выдачи клиенту 500. Если исключение в UI или BL, то лучше его логировать и выдавать 400. Так разработчик хотя бы может предполагать, что исключение в его коде. А 500 — это может быть веб-сервер гавкнулся, или прокси-сервер гавкнулся, или приложение вообще не стартануло нормально.