我正在尝试关注this网络博客,通过Asp.Net Web Forms使用Web Api类上传大文件。如果你查看帖子,你会注意到为了避免因为缓冲大文件而导致内存不足,他们建议覆盖IHostBufferPolicySelector接口。我在哪里实现界面?我是在Web Api类中,在Global.asax中进行的,还是完全偏离轨道并需要在其他地方执行实现?
答案 0 :(得分:5)
您不需要实现此接口,我只将其列为参考 - 该代码已经是Web API源代码的一部分(在System.Web.Http/Hosting/IHostBufferPolicySelector.cs
下)
您需要做的是覆盖基类System.Web.Http.WebHost.WebHostBufferPolicySelector
这就够了:
public class NoBufferPolicySelector : WebHostBufferPolicySelector
{
public override bool UseBufferedInputStream(object hostContext)
{
var context = hostContext as HttpContextBase;
if (context != null)
{
if (string.Equals(context.Request.RequestContext.RouteData.Values["controller"].ToString(), "uploading", StringComparison.InvariantCultureIgnoreCase))
return false;
}
return true;
}
public override bool UseBufferedOutputStream(HttpResponseMessage response)
{
return base.UseBufferedOutputStream(response);
}
}
然后在Global.asax
或WebApiConfig.cs
(以您喜欢的方式)注册新课程:
GlobalConfiguration.Configuration.Services.Replace(typeof(IHostBufferPolicySelector), new NoBufferPolicySelector());