.netコアで奇妙な問題が発生しました 特定の状況下で、インストールアクションにリダイレクトするカスタムミドルウェアを作成しました。ミドルウェアの最初のリダイレクト後リダイレクト.netコア
私のstartup.cs内で、私はapp.UseMvcミドルウェアの上にミドルウェアを追加しました。
app.SetInstall();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
これは私のSetInstallミドルウェア内部の私のinvokeメソッドである
public async Task Invoke(HttpContext context)
{
if (isInstallerRunInstance())
{
if (!context.Request.GetEncodedUrl().Contains("install"))
{
context.Response.Redirect("/install", false);
}
}
await _next.Invoke(context);
}
isInstallerRunInstanceが、これはインストールアクションの候補であるかどうかを確認するために基盤となるシステムをチェックします。 これが存在し、インストールURLが呼び出されていない場合は、インストール方法にリダイレクトされます。
これは問題ありません。私の問題は後続のリクエストで発生します。 インストールが完了するとisInstallerRunInstanceがfalseを返すにもかかわらず、ルート経由でこの初期リダイレクトをインストールしたら、私はルート要求を試みます。
これをさらにデバッグするには、メソッド内で他のコードが実行される前に、次の行を先頭のinvokeメソッドに配置します。
var url = context.Request.GetEncodedUrl();
デバッガは、URLは、私がルートを要求したにもかかわらず、http://localhost:8000/installで、何のリダイレクトは、この時点で要求されていないと言われます。
さらに困惑する - 私がstartup.csに戻って、私のミドルウェアの使用を全面的にきれいにしてから、クリーンで再構築しても問題は残る。デバッグしてルートパスを要求しても、/ installにリダイレクトされます。 ローカルホストのCookieが存在しないように見えますが、キャッシュできる場所はどこにもありません。
おそらく、リダイレクト方法や.netコアのデフォルトのキャッシュに関して、私が見逃していることがあります。
私は完全に神秘的です。助けてください。
お使いのブラウザでリダイレクトが行われている可能性がありますか?または、ブラウザで302リダイレクトを取得していますか? – juunas
Chromeは301リダイレクトだと教えてくれています。デバッガのネットワークタブにはlocalhostがあり、ステータスコードは301です。コールスタックの次の項目は/ install urlです。注目すべき点は、firefoxとedge/IEで同じ動作が起こることです。最初のリダイレクト動作は正しいので、それ以降はリフレッシュする必要はありません。 – Aeptitude
301リダイレクトは永続的です。しかし、あなたは非永続的(つまり302)のリダイレクトを発行していると思いますか? 301を発行すると、ブラウザはそれを覚えて、アプリケーションを呼び出す前に307リダイレクトを行います。 – juunas