C#
 Computer >> コンピューター >  >> プログラミング >> C#

IApplicationBuilder.Use()とIApplicationBuilder.Run()C#Asp.net Coreの違いは何ですか?


IApplicationBuilderインスタンスを使用して、StartupクラスのConfigureメソッドでミドルウェアを構成できます。

Run()は、アプリケーションのリクエストパイプラインにターミナルミドルウェアを追加するIApplicationBuilderインスタンスの拡張メソッドです。

RunメソッドはIApplicationBuilderの拡張メソッドであり、RequestDelegateのパラメーターを受け入れます。

Runメソッドの署名

public static void Run(this IApplicationBuilder app, RequestDelegate handler)

RequestDelegateの署名

public delegate Task RequestDelegate(HttpContext context);

public class Startup{
   public Startup(){
   }
   public void Configure(IApplicationBuilder app, IHostingEnvironment env,
   ILoggerFactory loggerFactory){
      //configure middleware using IApplicationBuilder here..
      app.Run(async (context) =>{
         await context.Response.WriteAsync("Hello World!");
      });
      // other code removed for clarity..
   }
}

上記のMyMiddleware関数は非同期ではないため、実行が完了するまでスレッドをブロックします。したがって、async andawaitを使用して非同期にし、パフォーマンスとスケーラビリティを向上させます。

public class Startup{
   public Startup(){
   }
   public void Configure(IApplicationBuilder app, IHostingEnvironment env){
      app.Run(MyMiddleware);
   }
   private async Task MyMiddleware(HttpContext context){
      await context.Response.WriteAsync("Hello World! ");
   }
}

Run()を使用して複数のミドルウェアを構成する

以下は常に最初のRunメソッドを実行し、2番目のRunメソッドに到達することはありません

public void Configure(IApplicationBuilder app, IHostingEnvironment env){
   app.Run(async (context) =>{
      await context.Response.WriteAsync("1st Middleware");
   });
   // the following will never be executed
   app.Run(async (context) =>{
      await context.Response.WriteAsync(" 2nd Middleware");
   });
}

使用

複数のミドルウェアを構成するには、Use()拡張メソッドを使用します。 Run()メソッドに似ていますが、シーケンス内の次のミドルウェアを呼び出すための次のパラメーターが含まれている点が異なります

public void Configure(IApplicationBuilder app, IHostingEnvironment env){
   app.Use(async (context, next) =>{
      await context.Response.WriteAsync("1st Middleware!");
      await next();
   });
   app.Run(async (context) =>{
      await context.Response.WriteAsync("2nd Middleware");
   });
}

  1. C#ASP.NETWebAPIのFromBody属性とFromUri属性の違いは何ですか?

    ASP.NET Web APIがコントローラーのメソッドを呼び出すときは、パラメーターの値を設定する必要があります。これは、パラメーターバインディングと呼ばれるプロセスです。 モデル(アクションパラメーター)をバインドするには、通常はフォーマッターにデフォルト設定されますが、URIから[FromUri]属性でモデルを装飾する必要があります。 FromUriAttributeは、ModelBinderAttributeから継承するだけで、IUriValueProviderFactoryで定義されたValueProviderを使用してURIから特定のパラメーターを取得するようにWebAPIに指示

  2. C#のリストと辞書の違いは何ですか?

    辞書は、C#のキーと値のコレクションです。 Dictionary は、System.Collection.Generics名前空間に含まれています。辞書はジェネリック型であり、そこにないキーを見つけようとするとエラーを返します。 リストコレクションはジェネリッククラスであり、リストを作成するために任意のデータ型を格納できます。 リストはアイテムのグループです- List<string> myList = new List<string>() {    "Maths",    "English&qu