У меня есть приложение asp.net core mvc 2.2 с внедренной Локализацией Запроса. Вот мой startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddLocalization(options => { options.ResourcesPath = "Resources"; });
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
services.AddIdentity<ApplicationUser, ApplicationRole>().AddUserManager<ApplicationUserManager>()
.AddUserStore<ApplicationUserRoleStore>().AddSignInManager<ApplicationSignInManager>().AddRoleStore<ApplicationUserRoleStore>().AddRoles<ApplicationRole>()
.AddDefaultTokenProviders();
services.AddAuthentication(sharedOptions =>
{
sharedOptions.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
sharedOptions.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
}).AddCookie();
services.ConfigureApplicationCookie(options => { options.LoginPath = "/en-US/Login"; });
services.AddTransient<IBusinessMailRepository, BusinessMailRepository>();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseAuthentication();
IList<CultureInfo> supportedCultures = new List<CultureInfo>
{
new CultureInfo("en-US"),
new CultureInfo("cs-CZ"),
};
var localizationOptions = new RequestLocalizationOptions
{
DefaultRequestCulture = new RequestCulture("en-US"),
SupportedCultures = supportedCultures,
SupportedUICultures = supportedCultures
};
var requestProvider = new RouteDataRequestCultureProvider();
localizationOptions.RequestCultureProviders.Insert(0, requestProvider);
app.UseRouter(routes =>
{
routes.MapMiddlewareRoute("{culture=en-US}/{*mvcRoute}", subApp =>
{
subApp.UseRequestLocalization(localizationOptions);
subApp.UseMvc(mvcRoutes =>
{
mvcRoutes.MapRoute(
name: "default",
template: "{culture=en-US}/{controller=Home}/{action=Index}/{id?}");
});
});
});
}
Проблема в том, что большинство вызовов @ Url.Action () игнорирует активную культуру, включенную в URL. Например - я запрашиваю localhost: 12345 / cs-cz / ControllerName / ActionName, и большинство гиперссылок, созданных на странице, имеют localhost: 12345 / en-us / ... culture по умолчанию.
Мне нужно, чтобы все вызовы Url.Action генерировали URL-адреса на основе текущей выбранной культуры, включенной в исходный URL-адрес. Другими словами, мне нужно сохранять один выбранный идентификатор культуры между запросами.
Я привык к этому из asp.net MVC 5, где этот метод требует только еще одного сопоставления маршрутов и хорошо работает без дополнительной настройки.
Может кто-нибудь помочь мне, пожалуйста?
Благодаря.