在ASP.NET Core OData中使用[FromOdataUri]特性时,Swagger UI在默认情况下不能正确生成参数示例。为了解决这个问题,需要在启用Swagger的过程中使用一个中间件并附加一个处理器来解析参数。下面是一个示例代码:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
...
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "OData API V1");
c.OperationFilter
public class ODataOperationFilter : IOperationFilter { private readonly ODataSwaggerProvider _swaggerProvider;
public ODataOperationFilter(ODataSwaggerProvider swaggerProvider) { _swaggerProvider = swaggerProvider; }
public void Apply(Operation operation, OperationFilterContext context) { foreach (var parameter in operation.Parameters) { if (parameter.In == "query" && parameter.Extensions.ContainsKey("x-ms-odata")) { var odataParam = parameter.Extensions["x-ms-odata"].ToString(); var schema = _swaggerProvider.GetSwaggerSchema(odataParam); if (schema != null) { parameter.Schema = schema; parameter.Extensions.Remove("x-ms-odata"); } } } } }
services.AddSingleton
通过这种方法,可以使用[FromOdataUri]特性编写ASP.NET Core OData接口,并使用Swagger正确生成参数示例。