#c# #asp.net-core #interface #jsonresult
Вопрос:
Документация JsonResult (также мы можем увидеть это, если рассмотрим F12 JsonResult
определение в Visual Studio)
Реализует IActionResult, IStatusCodeActionResult
Мой вопрос в том, почему необходимо реализовать оба этих интерфейса ?
В документе IStatusCodeActionResult говорится, что он уже реализован IActionResult
Комментарии:
1. Я не уверен, что понимаю этот вопрос. Если он реализует IStatusActioNResult, он уже неявно реализует IActionResult (поскольку он наследуется от него), вот что говорится в документах. Так в чем же именно заключается ваш вопрос?
2. @Tseng извините за неясность. Я немного перефразирую свой вопрос: Почему это реализовано так:
JsonResult : IStatusCodeActionResult, IActionResult
вместо того, чтобы простоJsonResult : IStatusCodeActionResult
? Более позднего варианта должно быть достаточно, не так ли ?3. Это не так, как вы можете видеть в исходном коде . В .NET 5.0 все так, как
public class JsonResult : ActionResult, IStatusCodeActionResult
в исходном коде
Ответ №1:
Потому что JsonResult нуждается в StatusCode свойства IStatusCodeActionResult и только в методе ExecuteResultAsync (контекст ActionContext).
это сделано для того, чтобы вы могли просто позвонить
public IActionResult ActionMethod()
из Asp.Net Контроллеры.
Если бы они создали класс таким образом:
public class JsonResult : IStatusCodeActionResult
Затем вам необходимо изменить метод действия на
public IStatusCodeActionResult ActionMethod()
Разработчики теперь не смогут гибко возвращать другие ответы, основанные на взаимодействии с пользователем/клиентом.
Комментарии:
1. Я не уверен, правильно ли я понял ваш ответ. Допустим, они создали такой класс, как
JsonResult : IStatusCodeActionResult
. В этом случае я все еще могу использоватьpublic IActionResult ActionMethod()
, нет ? ПотомуIStatusCodeActionResult
что это уже подтипIActionResult
Ответ №2:
Кредиты на комментарий @Tseng.
Источник для JsonResult
здесь не реализует оба интерфейса.