3 votes

ASP.Net Core CookieRequestCultureProvider ne fonctionne pas

J'ai une application ASP.Net Core 3.1 avec le fichier startup.cs suivant (j'ai essayé diverses combinaisons de la configuration ci-dessous en me basant sur des recherches sur Internet) :

public void ConfigureServices(IServiceCollection services)
    {
        ...
        services.Configure<RequestLocalizationOptions>(options =>
        {
            options.RequestCultureProviders = new[] { new CookieRequestCultureProvider() };
        });

y

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            ...
            var options = app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>();
            app.UseRequestLocalization(options.Value);

Et dans la méthode d'ouverture de session de mon application, je règle le cookie culturel comme suit :

HttpContext.Response.Cookies.Append(
                            CookieRequestCultureProvider.DefaultCookieName,
                            CookieRequestCultureProvider.MakeCookieValue(new RequestCulture([logged-in-user].CultureCode)));

Lors des demandes suivantes, je peux voir le cookie dans l'onglet Réseau des outils de développement de mon navigateur : cookie seen in browser dev tools

Pourtant, sur le serveur, toute requête donnée conserve la culture par défaut du serveur (qui est en-ZA ) pour mon environnement de développement. (Je vois cela en vérifiant System.Threading.Thread.CurrentThread.CurrentCulture.Name dans n'importe quel point d'arrêt dans les méthodes d'action de mon serveur)

Et je rencontre des problèmes de conversion de date entre mon client et mon serveur (par exemple le client avec en-US selon la capture d'écran ci-dessus) envoie une date de 3/5/2009 (5 mars) au serveur, et le serveur l'interprète comme étant le 3 mai.

Pourquoi mon serveur n'honore-t-il pas le CultureCookie ? Que me manque-t-il ?

2voto

Anduin Points 1972

Comme vous l'avez mentionné, vous avez enregistré votre service de localisation dans votre fichier ConfigureServices méthode.

La méthode que je suggère est de l'utiliser comme :

services.AddLocalization(options => options.ResourcesPath = "Resources");

services
    .AddControllersWithViews()
    .AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix)
    .AddDataAnnotationsLocalization();

Mais n'oubliez pas d'enregistrer l'intergiciel :

// In StartUp.cs Configure method
var SupportedCultures = new CultureInfo[]
{
    new CultureInfo("en"),
    new CultureInfo("zh")
};
app.UseRequestLocalization(new RequestLocalizationOptions
{
    DefaultRequestCulture = new RequestCulture(defaultLanguage),
    SupportedCultures = SupportedCultures,
    SupportedUICultures = SupportedCultures
});

Pour ce qui est de la date de fin de votre cookie, essayez de spécifier la date de fin de votre cookie. Comme ceci :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X