Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在ASP.NETCore1.1中响应.Cookies.Append()?_C#_Cookies_Globalization_Asp.net Core 1.1 - Fatal编程技术网

C# 如何在ASP.NETCore1.1中响应.Cookies.Append()?

C# 如何在ASP.NETCore1.1中响应.Cookies.Append()?,c#,cookies,globalization,asp.net-core-1.1,C#,Cookies,Globalization,Asp.net Core 1.1,我正在尝试将全球化添加到Intranet应用程序中,使用cookie允许用户选择区域性偏好。中间件已设置并正在运行,但我遇到了一个问题,即根据用户界面选择附加到cookie 该方法直接来自Asp.Net核心文档,如下所示: public void ConfigureServices(IServiceCollection services) { services.Configure<RequestLocalizationOptions>( options =&g

我正在尝试将全球化添加到Intranet应用程序中,使用cookie允许用户选择区域性偏好。中间件已设置并正在运行,但我遇到了一个问题,即根据用户界面选择附加到cookie

该方法直接来自Asp.Net核心文档,如下所示:

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<RequestLocalizationOptions>(
        options =>
        {
            var supportedCultures = new List<CultureInfo>
            {
            new CultureInfo("en-US"),
            new CultureInfo("en-GB"),
            new CultureInfo("fr-FR"),
            new CultureInfo("es-ES")
            };

            options.DefaultRequestCulture = new RequestCulture(culture: "en-GB", uiCulture: "en-GB");
            options.SupportedCultures = supportedCultures;
            options.SupportedUICultures = supportedCultures;
        });

    services.AddLocalization();
    services.AddMvc(config =>
    {
        var policy = new AuthorizationPolicyBuilder()
                         .RequireAuthenticatedUser()
                         .Build();
        config.Filters.Add(new AuthorizeFilter(policy));
    })
    .AddViewLocalization();

    services.AddSession(options => {
        options.CookieName = "Intranet";
    });
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    var locOptions = app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>();
    app.UseRequestLocalization(locOptions.Value);

    app.UseSession();
    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
    });
}

[HttpPost]
 public IActionResult SetLanguage(string culture, string returnUrl)
  {
    Response.Cookies.Append(
      CookieRequestCultureProvider.DefaultCookieName,
      CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture)),
        new CookieOptions { Expires = DateTimeOffset.UtcNow.AddYears(1) 
   });

   return LocalRedirect(returnUrl);
 }
public void配置服务(IServiceCollection服务)
{
服务。配置(
选项=>
{
var supportedCultures=新列表
{
新文化信息(“美国”),
新文化信息(“en GB”),
新文化资讯(“fr”),
新文化信息(“es”)
};
options.DefaultRequestCulture=新的RequestCulture(区域性:“en-GB”,uiCulture:“en-GB”);
options.SupportedCultures=SupportedCultures;
options.supportedCultures=supportedCultures;
});
services.AddLocalization();
services.AddMvc(配置=>
{
var policy=new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()文件
.Build();
config.Filters.Add(新的授权过滤器(策略));
})
.AddViewLocalization();
services.AddSession(选项=>{
options.CookieName=“内部网”;
});
}
公共void配置(IApplicationBuilder应用程序、IHostingEnvironment环境、iLogger工厂)
{
var locOptions=app.ApplicationServices.GetService();
app.UseRequestLocalization(locOptions.Value);
app.UseSession();
app.UseMvc(路由=>
{
routes.MapRoute(
名称:“默认”,
模板:“{controller=Home}/{action=Index}/{id?}”);
});
}
[HttpPost]
公共IActionResult集语言(字符串区域性、字符串返回URL)
{
Response.Cookies.Append(
CookieRequestCultureProvider.DefaultCookieName,
CookiierRequestCultureProvider.MakeCookieValue(新请求文化(文化)),
新CookieOptions{Expires=DateTimeOffset.UtcNow.AddYears(1)
});
返回LocalRedirect(returnUrl);
}
这些问题是:

  • 答复不存在
  • LocalRedirect不存在
  • 我试过:

  • HttpResponse,HttpRequest
  • 本地重定向结果

  • 首先,你必须使用。后面一个例子中的操作应该可以正常工作。 我还要补充一点:

    CultureInfo.CurrentCulture = culture;
    CultureInfo.CurrentUICulture = culture;
    
    这是我的配置:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddLocalization(opts => { opts.ResourcesPath = "Resources"; });
    
        services.AddMvc()
            .AddViewLocalization(
                Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpanderFormat.SubFolder,
                opts => { opts.ResourcesPath = "Resources"; }
            )
            .AddDataAnnotationsLocalization();
    
        services.Configure<RequestLocalizationOptions>(opts =>
        {
            var supportedCultures = new[]
            {
                new CultureInfo("en-US"), 
                ...               
            };
            opts.DefaultRequestCulture = new Microsoft.AspNetCore.Localization.RequestCulture("en-US");
            opts.SupportedCultures = supportedCultures;
            opts.SupportedUICultures = supportedCultures;
        });
    }
    
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        app.UseRequestLocalization();
    
        app.UseMvc(routes =>
        {
            routes.MapRoute(name: "default", template: "{controller=Home}/{action=Index}");
        });
    }
    
    public void配置服务(IServiceCollection服务)
    {
    AddLocalization(opts=>{opts.ResourcesPath=“Resources”;});
    services.AddMvc()
    .AddViewLocalization(
    Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpandPerformat.SubFolder,
    opts=>{opts.ResourcesPath=“Resources”;}
    )
    .AddDataAnnotationsLocalization();
    services.Configure(选项=>
    {
    var supportedCultures=new[]
    {
    新文化信息(“美国”),
    ...               
    };
    opts.DefaultRequestCulture=new Microsoft.AspNetCore.Localization.RequestCulture(“en-US”);
    opts.SupportedCultures=SupportedCultures;
    opts.supporteduccultures=支持的文化;
    });
    }
    公共void配置(IApplicationBuilder应用程序、IHostingEnvironment环境、iLogger工厂)
    {
    app.UseRequestLocalization();
    app.UseMvc(路由=>
    {
    MapRoute(名称:“默认”,模板:{controller=Home}/{action=Index});
    });
    }
    
    从您获得该示例的文档中,您可以看到该代码来自许多示例项目。这个特别的样品来自中国

    您的两个“缺失”方法实际上是
    ControllerBase
    的一部分(这是
    Controller
    继承的。因此,如果您将此操作方法放入控制器中,它将起作用

    public class HomeController : Controller
    {
        [HttpPost]
        public IActionResult SetLanguage(string culture, string returnUrl)
        {
            Response.Cookies.Append(
                CookieRequestCultureProvider.DefaultCookieName,
                CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture)),
                new CookieOptions { Expires = DateTimeOffset.UtcNow.AddYears(1) }
            );
    
            return LocalRedirect(returnUrl);
        }
    }
    

    在ASP.NET Core 2.1+中,如果通过调用
    Startup.cs
    中的
    app.UseCookiePolicy()
    来使用cookie策略功能来实现GDPR,请确保将cookie标记为必需,否则它将不会发送给未接受您的策略的用户

    Response.Cookies.Append(
                CookieRequestCultureProvider.DefaultCookieName,
                CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture)),
                new CookieOptions 
                { 
                    Expires = DateTimeOffset.UtcNow.AddYears(1), 
                    IsEssential = true 
                }
            );
    

    显然,您还应该在您的隐私声明中提到cookie。

    这根本不能回答问题。您提供的代码如何允许用户切换区域性首选项?我提供的代码显示的配置与问题中使用的配置完全相同。我在中也提到了第一段:“…您在示例中的操作应该可以正常工作…”如果配置正确。感谢您发布该代码。我已更新了我的问题,以包含我的启动元素。我没有在中进行本地化,因此没有要包含的.resx文件,但我认为我们非常相似。有趣的是,您使用的是Microsoft.AspNetCore.Localization.RequestCulture()默认情况下。你是在一个控制器中有代码,还是在其他地方是独立的?可能是控制器的副本…而不是类。这是一个愚蠢的错误,非常感谢!非常好的时机。刚刚开始在2.1中开发一个新的应用程序,可能很快就会在2.2中出现,我想很快就会遇到这个问题。