Я использую AutoRest для создания клиентской части API из swagger. json
Вывод
AutoRest code generation utility [cli version: 3.0.6187; node: v10.16.3, max-memory: 8192 gb]
(C) 2018 Microsoft Corporation.
https://aka.ms/autorest
NOTE: AutoRest core version selected from configuration: ~2.0.4413.
Loading AutoRest core 'C:\Users\kirst\.autorest\@microsoft.azure_autorest-core@2.0.4417\node_modules\@microsoft.azure\autorest-core\dist' (2.0.4417)
Loading AutoRest extension '@microsoft.azure/autorest.csharp' (~2.3.79->2.3.82)
Loading AutoRest extension '@microsoft.azure/autorest.modeler' (2.3.55->2.3.55)
FATAL: OperationId is required for all operations. Please add it for 'get' operation of '/api/Test' path.
FATAL: AutoRest.Core.Logging.CodeGenerationException: OperationId is required for all operations. Please add it for 'get' operation of '/api/Test' path.
at AutoRest.Modeler.SwaggerModeler.Build(ServiceDefinition serviceDefinition) in /opt/vsts/work/1/s/src/SwaggerModeler.cs:line 96
at AutoRest.Modeler.Program.<ProcessInternal>d__2.MoveNext() in /opt/vsts/work/1/s/src/Program.cs:line 60
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at NewPlugin.<Process>d__15.MoveNext()
FATAL: csharp/imodeler1 - FAILED
FATAL: Error: Plugin imodeler1 reported failure.
Process() cancelled due to exception : Plugin imodeler1 reported failure.
Error: Plugin imodeler1 reported failure.
Я заметил, что swagger. json не У меня есть упоминание OperationId
И все же я упомянул об этом в API
[AllowAnonymous]
[HttpGet("Test")]
[SwaggerOperation(OperationId = "Test")]
public IActionResult Test()
{
[Обновление]
Я провел 2 дня в аду атрибутов Swagger, как я пытаюсь и обновить мое решение для использования netcore3.1 и AutoRest 3
. Это поможет мне узнать, какие атрибуты мне нужно установить на контроллере значений, чтобы иметь возможность генерировать код клиента.
[Route("api/[controller]")]
[Produces("application/json")]
public class ValuesController : Controller
{
public ValuesController()
{
}
[HttpGet()]
[Produces("application/json")]
public IEnumerable<string> Get()
{
return new string[] {"value1", "value2"};
}
[Produces("application/json")]
[HttpGet("{id}")]
public string Get(int id)
{
return "value";
}
[HttpPost()]
public void Post([FromBody] string value)
{
}
// PUT api/values/5
[HttpPut("{id}")]
public void Put(int id, [FromBody] string value)
{
}
// DELETE api/values/5
[HttpDelete("{id}")]
public void Delete(int id)
{
}
}
Я использую
autorest --v3 --input-file=https://mywebsite/myapi/v1/swagger.json --output-folder=generated --csharp --namespace=myconnector
Выходные данные
AutoRest code generation utility [cli version: 3.0.6187; node: v12.16.1, max-memory: 8192 gb]
(C) 2018 Microsoft Corporation.
https://aka.ms/autorest
Loading AutoRest core 'C:\Users\kirst\.autorest\@autorest_core@3.0.6262\node_modules\@autorest\core\dist' (3.0.6262)
Loading AutoRest extension '@microsoft.azure/autorest.csharp' (~2.3.79->2.3.84)
Loading AutoRest extension '@microsoft.azure/autorest.modeler' (2.3.55->2.3.55)
FATAL: OperationId is required for all operations. Please add it for 'get' operation of '/api/Values' path.
FATAL: AutoRest.Core.Logging.CodeGenerationException: OperationId is required for all operations. Please add it for 'get' operation of '/api/Values' path.
at AutoRest.Modeler.SwaggerModeler.Build(ServiceDefinition serviceDefinition) in /opt/vsts/work/1/s/src/SwaggerModeler.cs:line 96
at AutoRest.Modeler.Program.<ProcessInternal>d__2.MoveNext() in /opt/vsts/work/1/s/src/Program.cs:line 60
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at NewPlugin.<Process>d__15.MoveNext()
Error: Plugin imodeler1 reported failure.
В коде API у меня есть TargetFramework netcoreapp3.1, Swashbuckle.AspNetCore 5.2.0, FluentValidation 8.6.2
У меня все работало, когда у меня был API. net Core 2.1 Однако я хотел вызвать библиотеку .netstandard2, поэтому я обновил свой API до netcore3.1
docs кажется неполным. Нет упоминания об Авторесте. Интересно, стоит ли мне пытаться использовать другой генератор кода?
[Обновить]
Образец json из ветви .netcore2.1
Образец json из ветви .netcore3.1
Однако сравнение может быть несправедливым, поскольку я мог что-то изменить в netcore3.1 Разветвление.
Я создал образец репозитория для этого связанного вопроса и настрою для этого ветку netcore2.1.