4

我正在尝试关注这个网络博客,通过 Asp.Net Web 表单使用 Web Api 类上传大文件。如果您浏览该帖子,您会注意到为了避免因缓冲大文件而导致内存不足,他们建议覆盖 IHostBufferPolicySelector 接口。我在哪里实现接口?我是在 Web Api 类、Global.asax 中执行此操作,还是我完全偏离轨道并需要在其他地方执行?

4

1 回答 1

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.asaxWebApiConfig.cs(无论您喜欢哪个)中注册您的新课程:

GlobalConfiguration.Configuration.Services.Replace(typeof(IHostBufferPolicySelector), new NoBufferPolicySelector());
于 2012-10-02T22:42:58.903 回答