我使用ASP.NET Identity Core进行身份验证。我有一个带登录路径的AngularJS SPA(UI-Router)。我的用户被路由到转义的网址而不是真实的网址。
我的登录路径设置为" /#!/ login",但我的用户被路由到:" /%23!/ login"这导致浏览器中的401。
我已经尝试过使用System.Uri.EscapeDataString,System.Uri.EscapeUriString而没有逃避任何运气。
Startup.cs
services.AddAuthentication()
.AddCookie(cookie =>
{
cookie.LoginPath = System.Uri.EscapeDataString("/#!/login");
})
AngularJS路线
.state('login', {
url: 'login',
views: {
'': { templateUrl: './Home/login.html', controller: "loginController" }
}
})
我已确认服务器正在生成302响应,其中包含以下位置:" http://localhost:63939/%23!/login?ReturnUrl=%2Fadministrator"。所以服务器肯定是在逃避"#!"这不是浏览器正在做的事情。
答案 0 :(得分:0)
我唯一能够弄清楚的是在OnRedirectToLogin cookie身份验证事件中忽略RedirectUri。必须有一个更好的方法。
cookie.Events = new CookieAuthenticationEvents()
{
OnRedirectToLogin = context =>
{
context.Response.Redirect(System.Uri.UnescapeDataString(context.RedirectUri));
return Task.FromResult(0);
}
};