ASP.NET Core Web API: добавить значение параметра приложения в маршрут контроллера - PullRequest
0 голосов
/ 08 ноября 2019

У меня есть проект ASP.NET Core Web API, и я хотел бы, чтобы маршруты моих контроллеров были:

api/vX.Y/custom_name

У меня было бы второе значение в AppSettings, например

"ApiVersion":"vX.Y"

но я не уверен, как "внедрить" это значение в маршрут контроллера.

1 Ответ

0 голосов
/ 11 ноября 2019

Если вы хотите включить версию API по умолчанию от appsettings.json, вы можете попробовать:

  1. appsettings.json

    {
        "ApiVersion": "2.1"
    }
    
  2. ConfigureApiVersioningOptions

    public class ConfigureApiVersioningOptions : IConfigureOptions<ApiVersioningOptions>
    {
        private readonly IServiceProvider _serviceProvider;
    
        public ConfigureApiVersioningOptions(IServiceProvider serviceProvider)
        {
            _serviceProvider = serviceProvider;
        }
        public void Configure(ApiVersioningOptions options)
        {
            var apiVersion = _serviceProvider.GetRequiredService<IConfiguration>().GetSection("ApiVersion").Value;
            options.DefaultApiVersion = ApiVersion.Parse(apiVersion);
        }
    }
    
  3. Startup.cs

    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }
    
        public IConfiguration Configuration { get; }
    
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc(options => {
                options.EnableEndpointRouting = false;
            });
            services.AddApiVersioning();
            services.AddSingleton<IConfigureOptions<ApiVersioningOptions>, ConfigureApiVersioningOptions>();
        }
    
        // 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();
            }
    
            app.UseMvc();
        }
    }
    
  4. ValuesController

    [ApiController]
    [Route("api/v{version:apiVersion}/Values")]
    public class ValuesController : Controller
    {
        // GET api/values
        [HttpGet]
        public IEnumerable<string> Get()
        {
            return new string[] { "value113", "value223" };
        }
    }
    
...