C# 在自定义IHttpResult中处理HttpResponse

C# 在自定义IHttpResult中处理HttpResponse,c#,asp.net,.net,asp.net-web-api,idisposable,C#,Asp.net,.net,Asp.net Web Api,Idisposable,虽然我不关心这项工作。但是,我想从SO的人员那里了解一下,当IHttp处理程序使用该值时,他们如何实现一次性 故事是:我有一些定制的构建IHttpResult类,我目前正在Webapi2框架的API项目中使用它们 我有一个名为OKFileDownloadResult的IHttpResult子类,它基本上从文件位置读取流内容或内容,然后将该文件发送到客户端 以下是我的代码: var response = new HttpResponseMessage(HttpStatusCode.OK);

虽然我不关心这项工作。但是,我想从SO的人员那里了解一下,当IHttp处理程序使用该值时,他们如何实现一次性

故事是:我有一些定制的构建IHttpResult类,我目前正在Webapi2框架的API项目中使用它们

我有一个名为OKFileDownloadResult的IHttpResult子类,它基本上从文件位置读取流内容或内容,然后将该文件发送到客户端

以下是我的代码:

  var response = new HttpResponseMessage(HttpStatusCode.OK);
            StreamContent streamContent = null;

            if (Content == null)
            {
                streamContent = new StreamContent(File.OpenRead(MapPath(LocalPath)));
            }
            else
            {
                streamContent = new StreamContent(new MemoryStream(Content));
            }

            response.Content = streamContent;
            response.Content.Headers.ContentType = MediaTypeHeaderValue.Parse(ContentType);
            response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
            {
                FileName = DownloadFileName,

            };
 return response;
在这里,我将返回响应作为api操作中的最后一件事

然而,我要问你的问题是,如果我使用like

使用response=HttpResponse。。。{}

我得到以下错误,这是可以理解的

System.ObjectDisposedException:无法访问已处置的对象。 对象名称:“System.Net.Http.HttpResponseMessage”

我的问题是,我真的需要担心MemoryStream、StreamContent或HttpSposneMessage的任何处理吗


或者我应该把这个任务交给.Net GC来完成吗?

如果你要传递一个IDisposable,你不能自己处理它。但是,如果可以的话,我绝对会处理掉File.OpenRead调用-你留下了一个沉重的资源,让GC来获取。@Cory我能对MemoryStream、StreamContent或HttpResposneMessage做些什么吗?是的,你绝对应该处理流实例。正如您已经证明的那样,您不能在HttpHandler方法内对HttpResponseMessage实例调用Dispose。@sh1rts这样做会引发以下问题:System.ObjectDisposedException:无法访问封闭流。