私は.NET 5/Coreで作業しており、.NET Coreの基礎(以下のコード)を理解するために最も基本的なASP.NET Core Webアプリケーションを作成しましたが、プロパティは静的フィールドのように動作し、HTTPリクエスト間でその値を保持します。私はなぜ、どのようにこれを最も簡単な方法で解決するのか、そして複数のソリューション/アプローチがあるのかを理解したいと思います。複数のリクエストを混在させた基本.NETコアアプリケーション
「出力」文字列をプライベート非静的フィールドとして宣言していますが、新しいHTTPリクエストごとにリセットする必要があると仮定していますが、静的フィールド/プロパティのように動作し、以前の値を保持して新しい値を追加します。 例えば、Webページが最初に出力/
を示しているが、ページのカップルを更新した後、私は次の5つの出力を参照してくださいより多くの時間が
/
/favicon.ico
/
/favicon.ico
/
favicon.ico
が問題ではないと私は私のウェブブラウザがそれを要求していることを理解合併。上記の出力は、最初の3ページのリフレッシュ後に表示されますが、Webブラウザが2つのHTTPリクエストを送信するため、追加のページリフレッシュごとに2つ以上のラインが出力されます。 services.AddScoped
またはservices.AddTransient
を使用して解決策を思いつくかもしれませんが、各HTTP要求が別々に処理されているように見えるため、なぜサービスが必要になるのかわからないので、私のRequestHandlerクラスを再初期化する必要があります。私は単純なものを見逃していますか?サンプルコードのシンプルさのレベルでこれを処理する方法はありますか?
私の全体のアプリは以下Startup.csで構成されています
using System.Threading.Tasks;
using Microsoft.AspNet.Builder;
using Microsoft.AspNet.Http;
namespace BasicApp
{
public class Startup
{
public static void Main()
{
}
public void Configure(IApplicationBuilder app)
{
app.UseMiddleware<RequestHandler>();
}
}
public class RequestHandler
{
RequestDelegate _next;
private string Output = "";
public RequestHandler(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext context)
{
Output += context.Request.Path + "\n";
await context.Response.WriteAsync(Output);
}
}
}
あなたの質問は何ですか?私はここで何が起こりたいのか、具体的には明確ではありません。 –
私は個人的な出力フィールド/プロパティが静的フィールドのように振る舞わないと思います。したがって、新しいHTTPリクエストごとに値を初期化してリセットする必要があります。私はそれを静的と宣言しませんでしたが、それは静的であったようにHTTPリクエスト間でその値を保持します。つまり、初期化されず、新しいHTTPリクエストごとに値をリセットしないミドルウェアに頼ることはできません。 –
簡単に言うと、.NETが新しいHTTPリクエストごとに自分のRequestHandlerミドルウェアクラスを自動的に初期化しないのはなぜですか?最も基本的な方法でHTTPリクエストごとに自動的に初期化する方法を理解しようとしています。 –