在.net核心中遇到一个奇怪的问题 在某些情况下,我创建了一些自定义中间件来重定向到安装操作。
在我的startup.cs中,我在app.UseMvc中间件上面添加了中间件;
app.SetInstall();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
这是我在SetInstall中间件
中的调用方法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,则它将重定向到安装方法。
这样可行 - 我的问题出现在后续请求中。 完成初始重定向后,通过root进行安装,我尝试了root请求,即使安装完成并且isInstallerRunInstance返回false,它仍会重定向到/ install。
为了进一步调试,我在方法中执行任何其他代码之前,将以下行放在顶部的invoke方法中;
var url = context.Request.GetEncodedUrl();
调试器告诉我url是http://localhost:8000/install,即使我请求了root,此时也没有请求重定向。
更令人费解的是 - 如果我再回到startup.cs并完全注释掉我的中间件,那么清理并重建问题依然存在。我调试并请求根路径,它仍然重定向到/ install。 似乎没有任何localhost cookie,我无法看到任何可以缓存的地方。
对于.net核心中的Redirect方法或默认缓存,我可能会遗漏一些内容。
我完全神秘了。有什么帮助吗?
答案 0 :(得分:1)
在这种情况下的问题是Redirect的永久参数在第一个版本中是真的。这发布了301永久重定向到浏览器,使其缓存。这就是为什么它不会改变。
每https://superuser.com/questions/304589/how-can-i-make-chrome-stop-caching-redirects/304600#304600清除缓存解决了这个问题。