标签: nswagstudio

Swagger C# 枚举生成 - 底层 int 值与原始枚举不匹配

我在服务器上创建了一个枚举,其中手动设置了整数值,而不是从 0 开始默认增量

public enum UserType
{
    Anonymous = 0,
    Customer = 10,
    Technician = 21,
    Manager = 25,
    Primary = 30
}
Run Code Online (Sandbox Code Playgroud)

我的服务器正在使用 AspNetCore.App 2.2.0 运行。它在 Startup.cs 中使用 swashbuckle aspnetcore 4.0.1 进行配置,以在每次服务器启动时生成一个 swagger json 文件来描述 api。

然后,我使用 NSwag Studio for windows v 13.2.3.0 生成带有该 swagger JSON 文件的 C Sharp api 客户端,以在 Xamarin 应用程序中使用。生成的 c Sharp api 客户端中生成的枚举如下所示 - 底层整数值与原始枚举不匹配。

[System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "10.1.5.0 (Newtonsoft.Json v11.0.0.0)")]
public enum UserType
{
    [System.Runtime.Serialization.EnumMember(Value = @"Anonymous")]
    Anonymous = 0,

    [System.Runtime.Serialization.EnumMember(Value = @"Customer")]
    Customer = 1, …
Run Code Online (Sandbox Code Playgroud)

c# swagger asp.net-core swagger-codegen nswagstudio

13
推荐指数
2
解决办法
1万
查看次数

使用 Swashbuckle 5.x 在通用 T 参数引用属性上指定 nullable = true

我最近使用 Swashbuckle 5 和 newtonsoft json nuget 将我的 API 升级到 .net core 3.1 服务器,它生成一个 openapi 3 模式。然后我使用 NSwag 生成一个 C# API。以前我有一个带有 swashbuckle 4 的 .net core 2.2 服务器,生成了一个 swagger 2.0 api 模式。

我有一个适用于所有响应的通用响应类,包含一些关于响应的元数据,如状态代码和消息,以及包含响应内容的通用类型 T 的 Payload 属性。

当响应是错误代码时,我将有效负载属性设置为 null。我正在努力寻找一种定义我的 api 的方法,以便 swashbuckle 和 NSwag 结合产生一个 C# api,它将允许有效载荷属性在反序列化时为空。(swagger 2.0 / swashbuckle 4 没有问题)。

尽我所能,Payload 属性总是获取注释[Newtonsoft.Json.JsonProperty("payload", Required = Newtonsoft.Json.Required.DisallowNull...][System.ComponentModel.DataAnnotations.Required]注释。

据我了解,开放 API 3 现在允许 "$ref" 属性在架构定义中具有 "nullable": true 属性。如果我在创建后手动将其添加到我的定义中,NSwag 会正确删除 CSharp api 中的必需属性,并将 JsonProperty 必需属性设置为“默认”(非必需)而不是“DisallowNull”。
但是,我标记有效负载属性的任何内容都不会导致 nullable: true 出现在我的架构 …

c# swagger swashbuckle openapi nswagstudio

9
推荐指数
1
解决办法
3667
查看次数

使用 OpenApiReference,如何使用 .nswag json 选项文件(或任何替代文件)配置代码生成器选项

语境

我已将连接的服务添加到我的 .NET 6 项目中,并使用 NSwagCSharp 代码生成器来生成客户端。(在我之前的项目中我使用了NSwagStudio)

我发现在 .csproj 文件中可以添加选项:

<OpenApiReference Include="OpenAPIs\swagger.json" CodeGenerator="NSwagCSharp" ClassName="MyClient">
  <SourceUri>https://localhost:xxxx/swagger/v1/swagger.json</SourceUri>
  <Options>/UseBaseUrl:false /GenerateClientInterfaces:true /InjectHttpClient:false, /DisposeHttpClient:false,
  </Options>
</OpenApiReference>
Run Code Online (Sandbox Code Playgroud)

这些选项似乎与 NSwagStudio 保存到其 .nswag 文件中的选项非常相同。我不确定这只是一个猜测,其中一些到目前为止似乎有效。(这有记录在某处吗?)

然而 NSwagStudio 也保存默认值(我不知道是什么),所以在典型的 .nswag 文件中,json 中有大约 80 个设置:

"codeGenerators": {
 "openApiToCSharpClient": {
  ...
  "generateClientInterfaces": true,
  "clientBaseInterface": null,
  ... up to more than 80 lines...
Run Code Online (Sandbox Code Playgroud)

问题

<Options>这将导致.csproj 文件中的 element中出现很长的一行。(似乎不允许换行(?))。有没有办法使用外部选项文件(例如 json .nswag 文件)来配置代码生成选项?

.net openapi nswag nswagstudio

8
推荐指数
1
解决办法
3142
查看次数

如何使用 Nswag 为我的 API DTO(基于生成器)指定不同的名称?

我有一个 .NET 5.0 ASP.NET Core 项目,我正在使用它Nswag来生成 API 客户端。假设我有以下 API 模型:

public class GetFooListResponseModel
{
    public string Bar { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我想要的是两件事。让我们从基本的开始。

  • 如何使生成的 API 客户端模型名称与我的项目中的模型名称不同?例如,我希望调用生成的打字稿模型而Foo不是GetFooListResponseModel.
  • 我可以根据它生成的客户端让它们具有不同的名称吗?例如,对于我的 C# 客户端,我完全可以接受现有的模型名称,但需要更改打字稿名称。如果这是不可能的,那也没什么大不了的,但那就太好了。

非常感谢!

c# asp.net-core openapi nswag nswagstudio

6
推荐指数
2
解决办法
2262
查看次数

我们可以在 Visualstudio csproj 项目文件中配置 NSwagCSharp 代码生成器吗?

NSwagStudio 为我们提供了大量的设置来获取 C# 中自定义自动生成的 swagger 客户端。

但是,当我们使用 VisualStudio 2019 解决方案资源管理器并打开项目上的“连接服务”时,我们可以从 swagger json 文件添加 OpenAPI 服务,但我没有看到任何配置代码生成器的方法。这样你就有了一个默认的。

例如,是否可以在 Visualstudio csproj 项目文件中配置 NSwagCSharp 代码生成器?

c# visual-studio-2019 nswagstudio

6
推荐指数
1
解决办法
1828
查看次数

NSwag MSBuild“路径‘/api/Account’上的方法‘get’已注册多次”

我正在尝试生成一个招摇规范,NSwag.MSbuild但每当我这样做时,它都会向我抛出以下消息:

路径“/api/Account”上的方法“get”被注册多次

现在的问题是我的方法是无路由的,如下所示控制器的一些示例

        [HttpPost]
        [HttpGet]
        [AllowAnonymous]
        public IActionResult ExternalRegister(string provider, string returnUrl = null)

        [HttpGet]
        public IActionResult AddLogin(string provider, string returnUrl)

        [HttpGet]
        [AllowAnonymous]
        public ActionResult SignUpConfig()
Run Code Online (Sandbox Code Playgroud)

我明白它为什么这样做,但我不明白的是,在 NSwag Studio 中做同样的事情是有效的,我使用的命令是否有$(NSwagExe_Core22) webapi2swagger 一个选项,以便它像 NSwag Studio 一样成功生成?

c# asp.net-core nswag nswagstudio

4
推荐指数
1
解决办法
6194
查看次数

NSwagStudio,在使用 NSwag 生成的客户端方法名称中包含 Http 请求方法名称

我使用 NSwagStudio 为 .Net Core 3.1 API 生成 Angular 客户端。该API 包括可与多种Http 请求类型(例如POST、GET)一起使用的端点。客户端为每个请求生成一个具有相同基本名称和数字的方法。

该架构包含一个/contract支持GETPOSTrequests 的端点,以及一个/contract/{ID}支持GET和requestsPOST的端点DELETE

生成的客户端具有以下方法:

  • ContractAsync对于没有 ID 的 GET 请求
  • Contract2Async对于没有 ID 的 POST 请求
  • Contract3Async对于带有 ID 的 GET 请求
  • Contract4Async对于带有 ID 的 POST 请求
  • Contract5Async对于带有 ID 的 DELETE 请求

我希望它生成名为:

  • GetContractAsync对于没有 ID 的 GET 请求
  • PostContractAsync对于没有 ID 的 POST 请求

ETC

问题的答案是“实现并提供自己的 IOperationNameGenerator”请参阅/sf/answers/3495479221/

我不知道如何实现和提供这个 IOperationNameGenerator。

“通过反射的 Web …

asp.net-core angular nswagstudio

3
推荐指数
1
解决办法
1444
查看次数

NSwagStudio 如何保存代码生成设置

通过NSwagStudio为 web api 生成 C# 客户端时,有一个选项可以配置设置以实现所需的输出。但是,退出应用程序并再次运行后,您必须再次从头开始设置设置。

所以我想知道是否有办法保存代码生成设置并在应用程序重启后使用它们?

c# code-generation swagger nswag nswagstudio

1
推荐指数
1
解决办法
321
查看次数