Если ваш контент является строкой, нет веских причин использовать конкретный результат c объекта - фактически это добавит накладные расходы, которые могут снизить производительность. ObjectResult
полезен для кодирования объектов в запрошенный формат и, таким образом, выполняет дополнительные операции, чтобы проверить, как сериализовать данный объект.
Вы можете легко увидеть, что требуются дополнительные шаги, когда вы посмотрите на реализацию на Github:
ContentResult - это просто простой объект, наследующий непосредственно от ActionResult с некоторыми типизированными свойствами.
OkObjectResult - тонкий слой вокруг ObjectResult который просто устанавливает код состояния в своем конструкторе.
ObjectResult имеет сложные типы, такие как набор средств форматирования вывода, которые создают накладные расходы, поскольку их необходимо инициализировать.
Позже в конвейере ContentResult
будет обрабатываться ContentResultExecutor
, а ObjectResult
будет обрабатываться ObjectResultExecutor
.
ContentResultExecutor довольно прост, он в основном просто пишет закодированный результат в поток ответа.
ObjectResultExecutor не так просто, это на формирует такие операции, как проверка запрошенного типа вывода, определение типа данного объекта и сериализация объекта перед записью его в поток вывода.
Короче говоря: если вам просто нужно вернуть строку, используйте ContentResult
. Если вам нужно вернуть сложный объект и вы хотите воспользоваться такими функциями, как автоматическое получение правильного формата вывода и оптимизированные для производительности процедуры сериализации, используйте какой-то тип ObjectResult
.