MVC Core 3.0选项。LoginPath-添加本地化路由参数

问题描述 投票:0回答:1

我在启动-ConfigureServices中有以下代码:

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
                .AddCookie(options =>
                {

                    options.LoginPath = new PathString("/en/Authentication/LogIn");
                });

一切都很好,但是我找不到使用URL参数(en / de / es等)使LoginPath可本地化的方法

我的MapControllerRoute看起来像:

"{lang}/{controller=Home}/{action=Index}/{id?}"

是否可以重定向到适当的lang进行身份验证,例如用户是否正在访问/ de / NeedAuth / Index-应该将其重定向到/ de / Authentication / LogIn?

asp.net-mvc asp.net-mvc-3 model-view-controller asp.net-mvc-routing
1个回答
0
投票

好我花了一个小时,这是一个解决方案-万一有人有类似的用例。

步骤1:创建一个将动态获取当前http请求以确定重定向的新类:

public class CustomCookieAuthenticationEvents : CookieAuthenticationEvents
    {
        public override Task RedirectToLogin(RedirectContext<CookieAuthenticationOptions> context)
        {
            var httpContext = context.HttpContext;

            var routePrefix = httpContext.GetRouteValue("lang");

            context.RedirectUri = $"/{routePrefix.ToString()}/Authentication/LogIn";
            return base.RedirectToLogin(context);
        }
    }

步骤2:在“启动”中,修改与重定向到身份验证页面有关的cookie身份验证声明:

services.AddScoped<CustomCookieAuthenticationEvents>();
            services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
                .AddCookie(options =>
                {
                    options.LoginPath = new PathString("/Authentication/LogIn");
                    options.EventsType = typeof(CustomCookieAuthenticationEvents);
                });

上面注意将CustomCookieAuthenticationEvents注册为服务。

© www.soinside.com 2019 - 2024. All rights reserved.