2016-05-20 6 views
2

Я видел, что он использовал для добавления заголовков в ответ, а затем возвращал файл для потоковой передачи.ASP.NET MVC ExecuteResult vs ActionResult

public override void ExecuteResult(ControllerContext context) 
{ 
    ... 
     response.AddHeader("Accept-Ranges", "bytes"); 
     response.AddHeader("Content-Length", responseLength.ToString()); 
     response.Cache.SetCacheability(HttpCacheability.Public); //required for etag output 
     response.Cache.SetETag(etag); //required for IE9 resumable downloads 
     response.ContentType = blockBlob.Properties.ContentType; 

     blockBlob.DownloadRangeToStream(response.OutputStream, startIndex, responseLength); 
} 

Какая разница в использовании ExecuteResult против ActionResult и как бы вы сделать это Асинхронный?

ответ

2

ExecuteResult - единственный и единственный абстрактный метод ActionResult. Именно этот метод выполняется средой MVC после того, как метод действия возвращается для получения вывода в браузере.

namespace System.Web.Mvc 
{ 
    public abstract class ActionResult 
    { 
     public abstract void ExecuteResult(ControllerContext context); 
    } 
} 

Итак, буквально нет никакой разницы между ними - возвращение любого ActionResult подкласс рассказывает рамки MVC, чтобы выполнить метод ExecuteResult на этом классе.

Если вы используете MVC 5, нет возможности запустить его Async. Однако MVC Core ActionResult class содержит метод ExecuteResultAsync.

2

ExecuteResult - это абстрактный метод на ActionResult. ActionResult - базовый класс для любого результата, возвращаемого с помощью ASP.NET MVC-контроллера, за исключением встроенных типов данных в C#.

Если вы реализуете ExecuteResult, это, вероятно, нестандартная реализация для результата.

Это объясняется в документации ActionResult.ExecuteResult на this documentation page, он говорит следующее:

(метод ExecuteResult) Включает обработку результата метода действия с помощью пользовательского типа, который наследует от класса ActionResult.

+0

«Если вы реализуете ExecuteResult, это, вероятно, нестандартная реализация для результата». это ключевой момент. –