Вам необходимо наследовать от Controller
, чтобы использовать служебный метод Controller.Json
. Однако вам не нужно наследовать от Controller
только для создания JsonResult
. Вы всегда можете просто новый. Пока вы находитесь в контроллере (не обязательно тот, который наследует Controller
), это все равно будет работать:
return new JsonResult(object);
Что касается того, почему вам нужно будет наследовать от Controller
, а не просто ControllerBase
; многие из полученных в результате служебных методов на самом деле живут в Controller
. Причина этого заключается в том, что они предназначены для контроллеров c, ориентированных на просмотр, в то время как ControllerBase
обычно используется для контроллеров API.
Теперь можно подумать, что возвращение результатов JSON будет особенно полезно для контроллеров API, но на самом деле это не так: для контроллеров API вы должны скорее вернуть ObjectResult
и договориться о сериализации этого в формат, запрошенный клиент. Таким образом, контроллер API может легко поддерживать форматы, такие как JSON и XML одновременно.