2017-02-01 31 views
1

Я пытаюсь добавить глобализацию в приложение Intranet, используя куки-файл, чтобы пользователи могли выбирать культуру. Межплатформенное программное обеспечение настроено и запущено, но у меня возникла проблема с добавлением файла cookie на основе выбора пользовательского интерфейса.Как Response.Cookies.Append() в ASP.Net Core 1.1?

Метод прямо из документации 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); 
} 

Вопросы являются:

  1. Response не существует
  2. LocalRedirect не существует

Я пробовал:

  1. HttpResponse, HttpRequest
  2. LocalRedirectResult
+0

У вас есть, что код внутри контроллер или он отдельно в другом месте? – DavidG

+0

Возможный дубликат [Cookies и ASP.NET Core] (https://stackoverflow.com/questions/36166075/cookies-and-asp-net-core) –

ответ

3

Из документов, где вы получили этот образец, вы можете увидеть, что код происходит от GitHub с большим количеством примеров проектов. Этот конкретный образец исходит от Localization.StarterWeb.

Ваши два «отсутствует» методы на самом деле часть 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); 
    } 
} 
+0

Контроллер ... нет класс. Это была глупая ошибка, большое спасибо! – K7Buoy

0

Прежде всего вы, чтобы использовать CookieRequestCultureProvider. Позже действие, которое у вас есть в примере, должно работать нормально. Я также хотел бы добавить следующее:

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}"); 
    }); 
} 
+1

Это не отвечает вопрос вообще. – DavidG

+0

Это так, как вам не нужно играть в Response.Cookies.Append() вообще ... –

+0

И как код, который вы предоставили, позволяет пользователю переключать культуру p Рекомендации? – DavidG