我尝试在asp.net core中同时实现swagger和odata,但是它们无法正常工作。
我无法集成给定的odata路由。
以下是我的配置,并且我收到了一个通用错误。
这是错误:
我尝试在asp.net core中同时实现swagger和odata,但是它们无法正常工作。
我无法集成给定的odata路由。
以下是我的配置,并且我收到了一个通用错误。
这是错误:
当我们向我们的.Net Core项目添加OData时,我们遇到了相同的问题。此帖子中代码片段中显示的解决方法可以在Swagger UI加载时修复我们的API错误。
据我所知,Swashbuckle for AspNetCore不支持OData。因此,在添加上述链接中的解决方法代码后,我们的Swagger UI可以正常工作,但是没有任何OData端点显示。
来自链接的代码片段:
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddOData();
// Workaround: https://github.com/OData/WebApi/issues/1177
services.AddMvcCore(options =>
{
foreach (var outputFormatter in options.OutputFormatters.OfType<ODataOutputFormatter>().Where(_ => _.SupportedMediaTypes.Count == 0))
{
outputFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/prs.odatatestxx-odata"));
}
foreach (var inputFormatter in options.InputFormatters.OfType<ODataInputFormatter>().Where(_ => _.SupportedMediaTypes.Count == 0))
{
inputFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/prs.odatatestxx-odata"));
}
});
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
var builder = new ODataConventionModelBuilder(app.ApplicationServices);
builder.EntitySet<Product>("Products");
app.UseMvc(routebuilder =>
{
routebuilder.MapODataServiceRoute("ODataRoute", "odata", builder.GetEdmModel());
// Workaround: https://github.com/OData/WebApi/issues/1175
routes.EnableDependencyInjection();
});
}
}
我可以使用DocumentFilter来完成这个操作。创建一个类,像下面的例子一样,然后将其添加到Swagger配置中:
services.AddSwaggerGen(options =>
{
options.SwaggerDoc("v1", new Info { Title = "Your title API v1.0", Version = "v1.0" });
options.DocumentFilter<CustomDocumentFilter>();
});
.MapWhen
来注册条件中间件。抱歉,现在无法编写复杂的答案,必须走了。 - Tseng