模型名称中的NSwag命名空间

sha*_*eep 5 nswag

可以生成客户端代码,以便模型的类名具有完整的名称空间作为前缀?

那应该避免相同的类名冲突。

com.foo.MyClass 
Run Code Online (Sandbox Code Playgroud)

it.foo.MyClass
Run Code Online (Sandbox Code Playgroud)

到现在我得到的是MyClassMyClass2这与其说是有意义的。

应该是最好有,在名称冲突的情况下,ComFooMyClassItFooMyClass

sha*_*eep 5

我找到了一个使用自定义 SchemaNameGenerator 而不是自定义 TypeNameGenerator 的解决方案(我没有包信息)。

internal class MySchemaNameGenerator : DefaultSchemaNameGenerator, ISchemaNameGenerator
{
    public override string Generate(Type type)
    {
        string retValue = base.Generate(type);
        // Quite ugly but do fix the concept
        if (retValue.Equals("BaseClass"))
        {
            retValue = type.FullName.Replace(".","_");
        }
        return retValue;
    }
}
Run Code Online (Sandbox Code Playgroud)

始终通过设置进行设置:

 app.UseSwaggerUi(typeof(WebApiApplication).Assembly, new SwaggerUiSettings
                {
                    SchemaNameGenerator = new MySchemaNameGenerator(),
                    ...
Run Code Online (Sandbox Code Playgroud)

这样我就得到了更有意义的东西

"/api/test/models/base": {
      "get": {
        "tags": [
          "Test"
        ],
        "operationId": "Test_Get2",
        "parameters": [],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/WebApi_Models_BaseClass"
            },
            "x-nullable": true
          }
        }
      }
    },
    "/api/test/models/extended": {
      "get": {
        "tags": [
          "Test"
        ],
        "operationId": "Test_Get3",
        "parameters": [],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/ExtendedClass"
            },
            "x-nullable": true
          }
        }
      }
    },
    "/api/test/modelli/base": {
      "get": {
        "tags": [
          "Test"
        ],
        "operationId": "Test_Get4",
        "parameters": [],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/WebApi_Modelli_BaseClass"
            },
            "x-nullable": true
          }
        }
      }
    },
Run Code Online (Sandbox Code Playgroud)

即使多态性的鉴别器属性需要基本名称“BaseClass”。


Dej*_*jan 5

让我更新 shadowsheep 对更新版本的 NSwag 的回答:

services.AddSwaggerDocument(cfg => { cfg.SchemaNameGenerator = new CustomSchemaNameGenerator(); });
Run Code Online (Sandbox Code Playgroud)

和:

internal class CustomSchemaNameGenerator : ISchemaNameGenerator
{
    public string Generate(Type type)
    {
        return type.FullName.Replace(".", "_");
    }
}
Run Code Online (Sandbox Code Playgroud)