2017-02-01 5 views
1

사용자가 문화권 환경 설정을 허용하기 위해 쿠키를 사용하여 인트라넷 응용 프로그램에 세계화를 추가하려고합니다. 미들웨어가 설정되어 실행 중이지만 UI 선택에 따라 쿠키에 추가하는 문제가 발생했습니다.ASP.Net Core 1.1의 Response.Cookies.Append() 방법은 무엇입니까?

방법은 아래와 같이 Asp.Net 코어 문서에서 직선 :이

  • LocalRedirect는
  • 존재하지 않는

    1. 응답이 존재하지 않습니다

      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. HttpResponse에, HttpRequest에
      2. LocalRedirectResult 당신이 CookieRequestCultureProvider을 사용했습니다 모든
    +0

    "실종"이 당신 안에 그 코드가 있습니까 컨트롤러 또는 다른 곳에서 독립 실행 형입니까? – DavidG

    +0

    [쿠키 및 ASP.NET 코어] (https://stackoverflow.com/questions/36166075/cookies-and-asp-net-core)의 가능한 복제본 –

    답변

    3

    , 당신은 코드 샘플 프로젝트의 많은 GitHub에서 오는 것을 볼 수 있습니다. 이 특정 샘플은 Localization.StarterWeb에서 제공됩니다.

    귀하의 방법 Controller 상속에서 무엇이다. 당신이 컨트롤러에이 작업 방법을 세우면, 그것은 작동합니다 그래서 (실제로 ControllerBase의 일부입니다.

    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

    첫째. 나중에 예제에서 취한 조치는 잘 작동합니다. 나는 또한이를 추가 :

    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