4

Asp.NetWebフォームを介してWebApiクラスを使用して大きなファイルをアップロードする方法について、このWebブログをフォローしようとしています。投稿を見ると、大きなファイルのバッファリングによるメモリ不足を回避するために、IHostBufferPolicySelectorインターフェイスをオーバーライドすることをお勧めします。インターフェイスはどこに実装しますか?Web ApiクラスまたはGlobal.asaxで実行しますか、それとも完全に軌道に乗っておらず、別の場所で実装を実行する必要がありますか?

4

1 に答える 1

5

このインターフェースを実装する必要はありません。参照としてリストしただけです。そのコードはすでにWebAPIソースの一部です(の下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());
于 2012-10-02T22:42:58.903 に答える