Swagger думает, что полезная нагрузка исходит от "запроса"
У меня есть основной проект aspnet с простым REST API.
NSwag используется как инструмент Swagger, и он работает на основе украшений, которые я наложил на модели и методы контроллера:
[Route("api/v2/")]
public class JobCollectionsControllerV2 : Controller
{
[HttpPut]
[Route("tenants/{tenant}/collections/{collection}")]
[SwaggerResponse(typeof(JobCollectionDtoV2))]
public async Task<IActionResult> CreateTask(JobCollectionDtoV2 collectionParams)
{
// removed
}
}
public class JobCollectionDtoV2
{
[Required]
[FromRoute]
[RegularExpression("^[a-z][a-z0-9]+$")]
[StringLength(maximumLength: 24, MinimumLength = 3)]
public string Collection { get; set; }
[Required]
[FromRoute]
[RegularExpression("^[a-z][a-z0-9]+$")]
[StringLength(maximumLength: 24, MinimumLength = 3)]
public string Tenant { get; set; }
[Required]
[FromBody]
public JobCollectionDetails CollectionDetails { get; set; }
public override string ToString()
{
return JsonConvert.SerializeObject(this);
}
}
public class JobCollectionDetails
{
[Required]
public bool Enabled { get; set; }
[Required]
[CollectionFrequency]
public TimeSpan Frequency { get; set; }
}
Приведенный выше код заставляет NSwag сгенерировать следующий файл Swagger:
{
"put": {
"tags": [
"JobCollectionsControllerV2"
],
"operationId": "JobCollectionsControllerV2_CreateTask",
"parameters": [
{
"type": "string",
"name": "collection",
"in": "path",
"required": true,
"maxLength": 24,
"minLength": 3,
"pattern": "^[a-z][a-z0-9]+$",
"x-nullable": false
},
{
"type": "string",
"name": "tenant",
"in": "path",
"required": true,
"maxLength": 24,
"minLength": 3,
"pattern": "^[a-z][a-z0-9]+$",
"x-nullable": false
},
{
"type": "object",
"name": "collectionDetails",
"in": "query",
"required": true,
"x-schema": {
"$ref": "#/definitions/JobCollectionDetails"
},
"x-nullable": true
}
],
"responses": {
"200": {
"x-nullable": true,
"description": "",
"schema": {
"$ref": "#/definitions/JobCollectionDtoV2"
}
}
}
}
}
Выглядит отлично, за исключением следующей части, которая указывает, что collectionDetails
должен исходить из параметров запроса, а не из тела.
{
"type": "object",
"name": "collectionDetails",
"in": "query", <<<<-------------- SHOULD BE 'body' or something like that
"required": true,
"x-schema": {
"$ref": "#/definitions/JobCollectionDetails"
},
"x-nullable": true
}
Я не уверен, как я могу это исправить - я очень ценю вашу помощь в этом.
Спасибо!
РЕДАКТИРОВАТЬ #1 (инициализация NSwag):
public void ConfigureServices(IServiceCollection services)
{
if (_env.IsDevelopment())
{
services.AddMvc();
services.AddSwaggerDocument();
}
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
_loggerFactory.AddDebug();
app.UseDeveloperExceptionPage();
app.UseSwagger(settings =>
{
settings.PostProcess = (document, request) =>
{
document.Info.Version = _context.CodePackageActivationContext.CodePackageVersion;
document.Info.TermsOfService = "None";
document.Info.Contact = new SwaggerContact
{
};
};
});
app.UseSwaggerUi3();
}
}
1 ответ
Я обновил библиотеки NSwag до последней версии v12 (начиная с версии v11), и проблема была решена - query
был действительно заменен body
Других изменений не было.