Ответ 1
Важным моментом здесь является то, что этот выбор является вопросом ПРЕДПОЧТЕНИЕ. Если вы создаете HTTP-атрибут "URI-Style", где типы возврата известны заранее, клиентом, это может быть вашим предпочтительным подходом.
Однако лично мне не нравятся возвращаемые типы CLR. Я считаю, что, применяя этот подход, вы, вероятно, потеряете много преимуществ HTTP. Я всегда возвращаю HttpResponseMessage.
Если вы рассматриваете стандартный вызов процедуры, есть два возможных результата, вы возвращаете тип возврата или получаете исключение. Взаимодействие HTTP гораздо более гибко, чем из-за перенаправления, временных недоступных серверов, без содержания, немодифицированных, серверных соединений, предпочтений заголовков и т.д.
Я думаю, что класс ApiController - это место, где ваше приложение получает возможность сопоставить вызовы объектно-ориентированного метода в HTTP-запрос/ответы. Я думаю, что это сопоставление явно облегчает использование HTTP. Предоставляя инфраструктуре магическое преобразование типа CLR в какое-то проводное представление, оно сохраняет некоторую типизацию, но оно затушевывает происходящее и заставляет вас делать какие-либо HTTP-взаимодействия косвенно через ActionFilters и MessageHandlers.
Я не заинтересован в том, чтобы убедить людей, которые предпочли бы возвращать типы CLR для изменения, я просто хочу заверить людей, которым нравится идея вернуть HttpResponseMessage, что это вполне жизнеспособный вариант, несмотря на то, что вы не увидите много таких образцов.