Контроллер и ядро ​​JsonResult asp. net - PullRequest
0 голосов
/ 17 января 2020

Почему мне нужно наследовать от контроллера, чтобы вернуть JsonResult?

Какой механизм делает тип JsonResult доступным?

Я пытался подумать об этом, и я думаю, что, может быть, контроллер объявляет это как тип, но я не знаю.

1 Ответ

1 голос
/ 17 января 2020

Вам необходимо наследовать от Controller, чтобы использовать служебный метод Controller.Json. Однако вам не нужно наследовать от Controller только для создания JsonResult. Вы всегда можете просто новый. Пока вы находитесь в контроллере (не обязательно тот, который наследует Controller), это все равно будет работать:

return new JsonResult(object);

Что касается того, почему вам нужно будет наследовать от Controller, а не просто ControllerBase; многие из полученных в результате служебных методов на самом деле живут в Controller. Причина этого заключается в том, что они предназначены для контроллеров c, ориентированных на просмотр, в то время как ControllerBase обычно используется для контроллеров API.

Теперь можно подумать, что возвращение результатов JSON будет особенно полезно для контроллеров API, но на самом деле это не так: для контроллеров API вы должны скорее вернуть ObjectResult и договориться о сериализации этого в формат, запрошенный клиент. Таким образом, контроллер API может легко поддерживать форматы, такие как JSON и XML одновременно.

...