我正在使用 ASP.NET 身份核心进行身份验证。 我有一个带有登录路由(UI-Router)的AngularJS SPA。 我的用户被路由到转义的 URL,而不是真实的 URL。
我的登录路径设置为"/#!/login",但我的用户被路由到:"/%23!/login",这会导致浏览器中出现 401。
我尝试使用System.Uri.EscapeDataString,System.Uri.EscapeUriString,根本没有逃脱,没有运气。
启动.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"。 因此,服务器肯定在转义"#!",这不是浏览器正在做的事情。
我唯一能弄清楚的就是在OnRedirectToLogin cookie身份验证事件中取消转义RedirectUri。 必须有更好的方法。
cookie.Events = new CookieAuthenticationEvents()
{
OnRedirectToLogin = context =>
{
context.Response.Redirect(System.Uri.UnescapeDataString(context.RedirectUri));
return Task.FromResult(0);
}
};