C# 在自定义IHttpResult中处理HttpResponse
虽然我不关心这项工作。但是,我想从SO的人员那里了解一下,当IHttp处理程序使用该值时,他们如何实现一次性 故事是:我有一些定制的构建IHttpResult类,我目前正在Webapi2框架的API项目中使用它们 我有一个名为OKFileDownloadResult的IHttpResult子类,它基本上从文件位置读取流内容或内容,然后将该文件发送到客户端 以下是我的代码: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);
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:无法访问封闭流。