如何在Nancy.Swagger包构建的Swagger-UI中添加参数的示例值?

时间:2018-03-12 17:37:52

标签: c# visual-studio-2017 swagger swagger-ui nancy

我使用Nancy.Swagger包和MetadataModule为我的API构建一个Swagger UI(根据以下链接:https://github.com/yahehe/Nancy.Swagger/wiki/Nancy.Swagger-for-Nancy-v2)。

我得到了用户界面,但问题是我无法为对象的属性添加示例值,它将作为参数传递到正文中。

我看到,例如,这个输出:

enter image description here

这里,我希望有一个真正的示例值,而不是单词“string”。但我不知道如何在这种方法中添加示例值,我将不胜感激。

来自API的片段和参数(PRequest的对象):

Post("/", async (x, ctx) =>
{   
    PRequest PostRequestModel;
    try
    {
        postRequestModel = this.Bind<PRequest>();
    }
来自MetaDataModule的

片段:

Describe["Post"] = desc => desc.AsSwagger(
            with => with.Operation(
                op => op.OperationId("Post")
                    .Tag("User")
                    .Summary("Post a new User")
                    .Description("This creates a new user.")
                    .BodyParameter(bp => bp.Description("A PRequest object").Name("PRequest").Schema<PRequest>())

1 个答案:

答案 0 :(得分:0)

我知道自您打开此书以来已经有绝对的年龄了,但我想我还是愿意分享。

首先,您需要一个模型,就像这样:

var xlink = "file://C:\\x\\y & DRAWINGS\\z - CONTROLLED\\a \\testsvg-A01.svg";
var regex = /(?<=\\)[^\\]*/gm;
console.log(xlink.match(regex)[xlink.match(regex).length - 1]);

您需要创建一个该模型的实例,其中填充了您想要的任何示例。

public class Model
{
    public string ExampleString { get; set; }
}

然后您可以将其添加到BodyParameter中,如下所示:

var exampleModel = new Model() { ExampleString = "foobar" }

我刚刚创建了一个.BodyParameter(para => para.Name("Example").Schema( new Schema() { Example = exampleModel } ).Build()) 类来容纳所有示例对象,然后将它们设置为public static。我认为这是最易读的方法。

这种方法存在两个问题,但尚未找到解决方案。一个是,Example对象似乎不尊重您用于Json序列化的任何设置。另外,我一直无法使它与“模型”视图同时工作,但是无论如何,在我看来,“模型”视图始终几乎毫无用处。如果我发现这些问题中的任何一个,我将进行更新。 :)