Я недавно обновил свой проект ASP.NET Core с поддержкой Swagger до 2.2.Я заметил, что все мои сообщения об ошибках теперь отображаются с телом ответа ProblemDetails.
{
"type": "string",
"title": "string",
"status": 0,
"detail": "string",
"instance": "string",
"additionalProp1": {},
"additionalProp2": {},
"additionalProp3": {}
}
Согласно Microsoft это ожидается - и я доволен этим.
Однако по какой-то причине мой проект не возвращает их для некоторых кодов возврата по умолчанию, таких как 401. Это (как я полагаю) соответствующая часть моей конфигурации запуска.
services
.AddAuthentication(options => {
options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(jwtOptions => {
jwtOptions.Authority = jwtConfiguration.Authority;
jwtOptions.TokenValidationParameters.ValidAudiences = jwtConfiguration.Audiences;
});
// Add framework services.
services
.AddMvcCore(options => {
options.Filters.Add<OperationCancelledExceptionFilterAttribute>();
})
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2)
.AddAuthorization()
.AddApiExplorer()
.AddJsonFormatters()
.AddCors()
.AddJsonOptions(options => options.SerializerSettings.Converters.Add(new StringEnumConverter()));
services.AddVersionedApiExplorer(
options => {
//The format of the version added to the route URL
options.GroupNameFormat = "'v'VVV";
//Tells swagger to replace the version in the controller route
options.SubstituteApiVersionInUrl = true;
});
services.AddApiVersioning(option => {
option.ReportApiVersions = true;
});
// Add data protection
services.AddDataProtection();
//Add swagger
services.AddSwaggerGen(c => {
c.SwaggerDoc("v1", new Info { Version = "1.0", ...});
c.SwaggerDoc("v2", new Info { Version = "2.0", ...});
c.AddSecurityDefinition("Bearer", ...});
c.AddSecurityRequirement(...);
c.DescribeAllEnumsAsStrings();
c.EnableAnnotations();
});
//Add documentation for end point
services.AddSwaggerGen(...});
При такой настройке любой неавторизованный запрос заканчивается 401, но без каких-либо проблем прилагается.Это не то, что, как я понял, должно произойти, и я не могу понять, какой переключатель мне нужно нажать, чтобы это произошло.