Можно ли использовать Swagger с AspNetCore Odata?

Вчера я искал решение, как использовать swagger на Core Odata, я попробовал несколько библиотек, но безуспешно, похоже, что в настоящее время он не полностью поддерживается.


person Svetlana Gurskaya    schedule 25.07.2018    source источник
comment
Проблема Github: github.com/RSuter/NSwag/issues/730#issuecomment-410293504   -  person Rico Suter    schedule 03.08.2018


Ответы (1)


Может эта информация кому-нибудь пригодится. На самом деле можно использовать NSwag и создавать документацию для Odata Core из коробки. Есть обходной путь.

Просто добавьте настройки swagger и Odata в Startup.cs.

     public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version
[Produces("application/json")]
[Route("api/test")] 
public class TestController : Controller
{

    [HttpGet]
    [EnableQuery]
    public IQueryable<Test> Get()
    {
        return _testService.Query();
    }

    //etc
}
1) .AddJsonOptions(options => { options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore; options.SerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver(); }); services.AddOData(); //etc } public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } var builder = new ODataConventionModelBuilder(app.ApplicationServices)); builder.EntitySet<Test>(nameof(Test)); app.UseMvc(routebuilder => { routebuilder.MapODataServiceRoute("odata", "odata", builder.GetEdmModel()); }); app.UseSwaggerUi(typeof(Startup).GetTypeInfo().Assembly, settings => { settings.GeneratorSettings.DefaultPropertyNameHandling = PropertyNameHandling.CamelCase; }); app.UseMvc(); //etc }

Затем отметьте Controller с атрибутом маршрута, как это было бы с WebApi. Примечание: маршрут должен отличаться от одаты. Добавьте [EnableQuery] в действие IQueryable. Примечание 2: вы не можете использовать [FromODataUri] для документов swagger. Действие с ним должно быть помечено как [SwaggerIgnore].

[Produces("application/json")]
[Route("api/test")] 
public class TestController : Controller
{

    [HttpGet]
    [EnableQuery]
    public IQueryable<Test> Get()
    {
        return _testService.Query();
    }

    //etc
}

Получить чванство бежать!

person Svetlana Gurskaya    schedule 25.07.2018