Управление версиями и культура ASP.NET Core 2 в маршруте - PullRequest
0 голосов
/ 29 мая 2018

Друзья!Я пытаюсь добавить в маршрут ASP.NET Core 2.0 версии веб-API (пакет Microsoft.Asp.NetCore.Mvc.Versioning) и локализацию (Microsoft.AspNetCore.Localization), чтобы получить URL-адрес, например: "api / {culture = en-US} / v {версия: apiVersion} / [controller] "

Отдельно они работают, но вместе постоянно ошибка 404 .. (

[ApiVersion("1")]
    [Route("api/{culture=en-US}/v{version:apiVersion}/[controller]")]
    public class ValuesController : Controller
    {

        private readonly IStringLocalizer<ValuesController> _localizer;

        public ValuesController(IStringLocalizer<ValuesController> localizer)
        {
            _localizer = localizer;
        }

        [HttpGet]
        public IActionResult Get()
        {
            var result = $"{_localizer["Title"].Value}";
            return Ok(result);
        }
    }


 public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddLocalization(x => x.ResourcesPath = "Resources");

            services.AddRouteAnalyzer();


            services.AddApiVersioning(opt => {
                opt.ReportApiVersions = true;
                opt.AssumeDefaultVersionWhenUnspecified = true;
                opt.DefaultApiVersion = new ApiVersion(1, 0);

            });

            services.AddMvc();
        }

        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseRouter(routes =>
            {
                routes.MapMiddlewareRoute("api/{culture=en}/{*mvcRoute}", subApp =>
                {
                    var supportedCultures = new[]
                    {
                        new CultureInfo("en"),
                        new CultureInfo("ru"),
                    };

                    var localizationOptions = new RequestLocalizationOptions
                    {
                        DefaultRequestCulture = new RequestCulture("en"),
                        SupportedCultures = supportedCultures,
                        SupportedUICultures = supportedCultures
                    };

                    var requestProvider = new RouteDataRequestCultureProvider();

                    localizationOptions.RequestCultureProviders.Insert(0, requestProvider);

                    subApp.UseRequestLocalization(localizationOptions);

                    subApp.UseMvcWithDefaultRoute();

                });
            });
        }
    }
...