我在这里没有完整的复制方案,因为这已在大型现有代码库中发生;但我希望这是可以解释的,有人会认出这种行为。
我有一个使用基于约定的路由的ASP.Net MVC 5应用程序,以及一些显式路由,它具有通常的默认Home / Index路由。默认路由有一个奇怪的行为,因为它不会在第一次请求时返回ASP.Net会话cookie。如果您重新加载页面或点击相同的路线而不清除缓存/ cookie;会话cookie被返回并设置。
默认路线:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
这个问题是我们有防伪令牌,这种情况导致它们在初始请求时中断(第一页加载,后续POST将失败)。此外,它似乎也影响Home / Index控制器上RequireHttpsAttribute的使用;因为它绕过它并允许在第一次请求时提供不安全的页面。
添加以下显式路由(在默认顺序之上)修复了问题:
routes.MapRoute(
"Home",
"",
new { controller = "Home", action = "Index" }
);
更新:我可能正在解释"返回"饼干错了。我的意思是在这种情况下对默认路由的初始请求的结果不会导致为该用户建立cookie。这不是唯一发生的行为,但似乎暗示了可能发生的事情。至少知道一个请求的完整调用堆栈/结果与默认路由和明确路由之间是否存在任何固有差异是有用的。如果有的话。