我有一个带有 API 版本控制的 MVC net core 2.2 应用程序。我只希望中间件为 api 的 v2 或更高版本运行。
我编写的中间件类使用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));
}