c# - Asp.Net Core 3.1 Cookies 未附加 Razor Pages C#

标签 c# asp.net-core cookies razor-pages

使用以下代码,Cookie 未附加到页面,我尝试将 IsEssential 添加到选项中,但没有成功。使用 Asp.Net Core 3.1 Razor 页面。这是我的大部分 startup.cs 和附加的 cookie 代码。

启动.cs

 public void ConfigureServices(IServiceCollection services)
        {
            services.Configure<CookiePolicyOptions>(options =>
            {
                // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                options.CheckConsentNeeded = context => true;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });
services.AddRazorPages();
            services.AddMvc(config =>
            {
                var policy = new AuthorizationPolicyBuilder()
                                 .RequireAuthenticatedUser()
                                 .Build();
                config.Filters.Add(new AuthorizeFilter(policy));
            });
services.AddHttpContextAccessor();
            services.TryAddSingleton<IActionContextAccessor, ActionContextAccessor>();
            services.AddSignalR();
            services.AddControllers().AddNewtonsoftJson();
            services.AddControllersWithViews().AddNewtonsoftJson();
            services.AddRazorPages().AddNewtonsoftJson();


}
 public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Error");
            }

            app.UseRequestLocalization();
            app.UseStaticFiles();
            app.UseCookiePolicy();
            app.useAuthentication();
            app.UseRouting();
            app.UseAuthorization();
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapRazorPages();
                endpoints.MapControllers();
            });

        }

添加 Cookie

            string key = "Cookie";
            var cookieValue = Request.Cookies[key];
            if(cookieValue == null)
            {
                string value = "true";
                var cookieOptions = new CookieOptions()
                {
                    Path = "/",
                    HttpOnly = false,
                    IsEssential = true,
                    Expires = DateTime.Now.AddDays(1),
                };
                HttpContext.Response.Cookies.Append(key, value, cookieOptions);
            }

建议是添加 IsEssential 以覆盖 CookiePolicy,但这并没有解决任何问题。 Devtools 应用程序仅显示 .AspNetCore.Identity.Application 和 .AspNetCore.Antiforgery cookie。

编辑: 通过更改解决

 services.Configure<CookiePolicyOptions>(options =>
            {
                // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                options.CheckConsentNeeded = context => true;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });

    services.ConfigureApplicationCookie(options =>
    {
        // Cookie settings
        options.Cookie.HttpOnly = true;
        options.ExpireTimeSpan = TimeSpan.FromMinutes(5);

        options.LoginPath = "/Identity/Account/Login";
        options.AccessDeniedPath = "/Identity/Account/AccessDenied";
        options.SlidingExpiration = true;
    });

最佳答案

我认为您在 startup.cs 中遗漏了一行

app.UseAuthentication();

它将身份验证中间件添加到您的应用程序。 您必须在 app.UseAuthorization();

之前调用它

所以它以这种方式显示:

app.UseRequestLocalization();
        app.UseStaticFiles();
        app.UseCookiePolicy();
        app.UseRouting();
        app.UseAuthentication();
        app.UseAuthorization();
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapRazorPages();
            endpoints.MapControllers();
        });

如果您按照 https://learn.microsoft.com/es-es/aspnet/core/security/authentication/identity?view=aspnetcore-3.1&tabs=visual-studio 中的说明进行操作它应该可以正常工作。

关于c# - Asp.Net Core 3.1 Cookies 未附加 Razor Pages C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63228479/

相关文章:

javascript - C#:如何从 JS 对象获取键的所有值?

c# - 多个计时器/回调——防止重复并监控它们的最佳方法

c# - 使用 IStringLocalizer 对数据注释进行本地化

c# - 与索引比较查找数组中的值

asp.net-core - 重定向到静态文件asp.net core

C# ASP.NET Core 构建动态表单

python - 未使用 Flask JWT 扩展设置 Cookie

java - htmlunit 中的 Cookie 政策

azure - 为具有 CNAME 记录的网站设置 cookie

C# 笔.DashPattern