ASP.NET MVC ExecuteResult与ActionResult的区别

4

我曾经看到它被用于向响应中添加头信息,然后返回一个文件进行流式传输。

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);
}

使用ExecuteResultActionResult的区别是什么?如何将其异步化?

2个回答

3
ExecuteResultActionResult的抽象方法。除C#内置的数据类型以外,ActionResult是从ASP.NET MVC控制器返回的任何结果的基类。
如果你正在实现ExecuteResult,那么它很可能是一个自定义结果的实现。
这在ActionResult.ExecuteResult文档中有所解释,可以在此文档页面中找到,其中写道:

(方法ExecuteResult) 使继承自ActionResult类的自定义类型能够处理操作方法的结果。


如果您正在实现ExecuteResult,那么它很可能是一个自定义结果的实现。这是关键点。 - Teoman shipahi

3

ExecuteResultActionResult 的唯一抽象方法。在控制器的动作方法返回后,MVC 框架会执行此方法以生成向浏览器输出的内容。

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

因此,这两者实际上没有区别 - 返回任何ActionResult子类都会告诉MVC框架在该类上执行ExecuteResult方法。

如果使用MVC 5,则无法以异步方式运行它。但是,MVC Core ActionResult包含一个ExecuteResultAsync方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接