如何为标识核心登录路径设置特殊字符



我正在使用 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);
    }
};

相关内容

最新更新