Почему метод ExecuteResult без тела в классе JsonResult

В MVC ActionResult — это абстрактный класс, имеющий ExecuteResult абстрактный метод. Конечно, ExecuteResult будет реализовано там, где ActionResult будет унаследовано.

JsonResult наследует класс ActionResult. Итак, согласно основному правилу, я ожидаю реализации метода ExecuteResult в классе JsonResult.

См. изображения ниже.

Класс ActionResult введите здесь описание изображения

Класс JsonResult введите здесь описание изображения

Но здесь нет ни тела, ни конкретной реализации метода ExecuteResult в классе JsonResult. Однако метод переопределяется, но без тела или реализации.

Так где же реальная реализация этого абстрактного метода?


person Yogesh Patel    schedule 13.07.2018    source источник


Ответы (2)


Вот как ведет себя ваша Visual Studio. Нам нужно включить параметры parituclar, чтобы увидеть исходный код встроенных библиотек в VS, который я не могу вспомнить, но вы можете увидеть исходный код здесь, а именно:

public override void ExecuteResult(ControllerContext context) {
        if (context == null) {
            throw new ArgumentNullException("context");
        }
        if (JsonRequestBehavior == JsonRequestBehavior.DenyGet &&
            String.Equals(context.HttpContext.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase)) {
            throw new InvalidOperationException(MvcResources.JsonRequest_GetNotAllowed);
        }

        HttpResponseBase response = context.HttpContext.Response;

        if (!String.IsNullOrEmpty(ContentType)) {
            response.ContentType = ContentType;
        }
        else {
            response.ContentType = "application/json";
        }
        if (ContentEncoding != null) {
            response.ContentEncoding = ContentEncoding;
        }
        if (Data != null) {
            JavaScriptSerializer serializer = new JavaScriptSerializer();
            response.Write(serializer.Serialize(Data));
        }
    }
person Ehsan Sajjad    schedule 13.07.2018

В Visual Studio вы не можете видеть какие-либо детали реализации встроенных классов по умолчанию. Для этого установите этот плагин в вашей VS

person Fakhar Ahmad Rasul    schedule 13.07.2018
comment
Я только что установил расширение Ref12 в VS2015 и перезапустил визуальную студию. Но не удалось увидеть какие-либо детали реализации сборки в классах. Должен ли я делать что-то еще? - person Yogesh Patel; 16.07.2018
comment
хорошо github.com/ASP -NET-MVC/aspnetwebstack/blob/master/src/ — это ссылка на исходный код класса JsonResult, но, конечно, вы не можете использовать с ним ярлык f12. - person Fakhar Ahmad Rasul; 16.07.2018