首页 > 解决方案 > Swashbuckle.OData 中 OData 函数的复杂类型参数

问题描述

我有 OData 功能:

public class ItemsController : ODataController
{
    [HttpGet]
    public async Task<IHttpActionResult> SomeFunc([FromODataUri]SomethingDTO something)
    {
        return Ok(1);
    }
}

东西DTO:

public class SomethingDTO
{
    public int Name { get; set; }
}

和 ODataConfig:

public static class WebApiConfig
{
    public static void Configure(HttpConfiguration config)
    {
        ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
        builder.EnableLowerCamelCase();
        builder.EntitySet<Item>("Items");

        var itemsEntityType = builder.EntitySet<Item>("Items").EntityType;

        var func = itemsEntityType.Collection.Function("SomeFunc");
        func.Parameter<SomethingDTO>("something");
        func.Returns<int>();

        config.MapODataServiceRoute("odata", "odata", builder.GetEdmModel());
    }
}

这很好用,但是当我打开 swagger 页面时,应用程序会抛出异常:在 Swashbuckle.OData.dll 中发生了“System.ArgumentOutOfRangeException”类型的异常,但未在用户代码中处理 ParameterName:TypeKind

func.Parameter<SomethingDTO>("something");当我从 OData 配置中删除此字符串时,Swagger 页面可以正常工作。但 OData 功能出现故障。

如何在 Swashbuckle.OData 中为 OData 函数定义复杂参数?

.NET 4.5.2

Microsoft.AspNet.OData 版本="6.0.0"

花花公子版本="5.6.0"

Swashbuckle.Core 版本="5.6.0"

Swashbuckle.OData 版本="3.5.0"

标签: c#.netodataswaggerswashbuckle

解决方案


推荐阅读