У меня есть приложение MVC net core 2.2 с API-версиями.Я только хочу, чтобы промежуточное программное обеспечение работало для версии v2 API или выше.
Класс промежуточного программного обеспечения, который я написал, использует IApiVersionReader.Read()
, однако, кажется, что он не заполняется, пока после строки UseMVC
вStartup
.
var apiVersion = _apiVersionReader.Read(_httpContextAccessor.HttpContext.Request);
Поэтому, если я зарегистрирую свое промежуточное программное обеспечение до UseMVC
, оно не сможет прочитать версию, используя метод управления версиями.
Но если я поставлю свое промежуточное программное обеспечение после UseMVC
линия, то это не срабатывает совсем.
Это похоже на ситуацию с курицей и яйцом!Как я могу заставить это работать?
Вот краткая версия моего запуска, для краткости.
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc(config =>
{
// Don't add auth in development.
if (!CurrentEnvironment.IsDevelopment())
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
config.Filters.Add(new AuthorizeFilter(policy));
}
}
);
services.AddTransient<IHttpContextAccessor, HttpContextAccessor>();
services.AddMvcCore()
.AddAuthorization()
.AddJsonFormatters(config =>
config.ReferenceLoopHandling = ReferenceLoopHandling.Ignore);
services.AddApiVersioning(options =>
{
options.ReportApiVersions = true;
options.AssumeDefaultVersionWhenUnspecified = true;
options.DefaultApiVersion = new ApiVersion(2, 0);
});
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseMvc();
app.UseMiddleware(typeof(UserDataLoggingMiddleware));
}