Как вернуть содержимое json с отступом из контроллера OData в ASPI Core Web API? - PullRequest
0 голосов
/ 29 декабря 2018

Я могу получить ожидаемый результат json из обычного WebApi следующим образом.

  services.AddMvc()
         .SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
         .AddJsonOptions(x=>
         {
             x.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented;
         });

Но я не могу найти способ вывода json, подобный этому, при использовании ODataController, а не ControllerBase, когда используется web api.ODataController всегда отправляет минимизированный json.

public class EmployeeController : ODataController
{

    [EnableQuery()]
    public IActionResult Get()
    {
        return Ok(new BOContext().Employees.ToList());
    }
}

Кроме того, startup.cs

 public class Startup
    {
        private static IEdmModel GetModel()
        {
            ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
            builder.EntitySet<Employee>("Employee");
            return builder.GetEdmModel();
        }

        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {

            services.AddOData();
            services.Configure<CookiePolicyOptions>(options =>
            {
                // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                options.CheckConsentNeeded = context => true;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });



            services.AddMvc()
                .SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
                .AddJsonOptions(x=>
                {
                    x.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.None;
                });
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
            }

            app.UseStaticFiles();
            app.UseCookiePolicy();

            app.UseMvc(routes =>
            {
                routes.MapODataServiceRoute("odata", "odata", GetModel());
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");

            });
        }
    }

Маршрут работает, и я получаю правильные данные.

Есть лиспособ контролировать и выводить отступ JSON с контроллера OData?

1 Ответ

0 голосов
/ 29 декабря 2018

Я предлагаю вам сделать передачу с минимизированным jsonm, но используйте json beutifier, чтобы показать отформатированный json.не делайте этого на этапе потока данных.

Если вы используете JavaScript на внешней стороне.Вы можете просто использовать

JSON.stringify(jsObj, null, "\t"); // stringify with tabs inserted at each level
JSON.stringify(jsObj, null, 2);    // stringify with 2 spaces at each level
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...