Почта веб-API .netcore не работает без SSL - PullRequest
0 голосов
/ 28 января 2020

У меня есть приложение MVC core 2.2 с контроллерами, контроллерами API и некоторыми представлениями. Некоторые из представлений используют конечные точки API в одном приложении. Все было в порядке, пока я не включил TLS 1.2 на моем windows сервере. Теперь все конечные точки, оформленные как методы GET, работают. Но все POST перестали работать с chrome, сообщающим об этом POST 'link' net::ERR_CONNECTION_RESET. Другие браузеры перехватывают исключение при сбое и отображают мой текст ошибки с объектом

$.ajax({
  url: "/api/Cart",
  method: "post",
  data: JSON.stringify(vm),
  contentType: "application/json"
}).done(function(result) {
  console.log(result);
}).fail(function(ex) {
  console.log("Error occured while adding to cart" + ex)
});

Я хочу иметь возможность POST даже без SSL. Я отключил TLS 1.2 и перезапустил, но все тот же результат. Если я просматриваю сайт с помощью https: //, все конечные точки POST и GET работают отлично, но если я просматриваю с помощью HTTP: //, работают только конечные точки GET, все конечные точки POST не работают. Я прочесал inte rnet почти 5 часов для чего-то, что я думал, будет простым.

public void ConfigureServices(IServiceCollection services)
    {
        var connectionString = Configuration.GetConnectionString("DataConnection");
        services.AddDbContext<DataContext>(options => options.UseSqlServer(connectionString));

        //Inject Connection String to other Classes
        services.AddSingleton(_ => connectionString);

        services.AddIdentity<ApplicationUser, IdentityRole>()
            .AddEntityFrameworkStores<DataContext>()
            .AddDefaultTokenProviders();

        services.ConfigureApplicationCookie(options =>
        {
            options.Cookie.HttpOnly = true;
            options.ExpireTimeSpan = TimeSpan.FromHours(1);
        });
        services.AddScoped<IUnitOfWork, UnitOfWork>();


        services.AddMediatR(typeof(CreateProductCommand).Assembly, typeof(CreateProductCommandHandler).Assembly);
        services.AddAutoMapper(typeof(MappingProfile));

        // Add memory cache services
        services.AddMemoryCache();

        services.AddMvc(o =>
        {
            var policy = new AuthorizationPolicyBuilder()
                .RequireAuthenticatedUser()
                .Build();
            o.Filters.Add(new AuthorizeFilter(policy));
        })  .SetCompatibilityVersion(Microsoft.AspNetCore.Mvc.CompatibilityVersion.Version_2_2);
    }

    // HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
            app.UseDatabaseErrorPage();

        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
        }
        var serviceProvider = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>().CreateScope().ServiceProvider;
        DataContextSeed.Initialize(serviceProvider);

        app.UseStaticFiles();
        app.UseAuthentication();

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

Выше класс Startup и пример поста здесь

[HttpPost]
    public IActionResult Post([FromBody] SaleItemDTO md)
    {
        if(md != null)
        {
            if(md.Quantity <= md.Stock)
            {
                _sales.SalesPerson = User.Identity.Name;
                _sales.SalesType = md.SalesType;
                return Ok(_sales.ItemsInDb);
            }
        }
        return BadRequest(new { Message = "Not Valid Content posted" });
    }

Помогите с вашими мыслями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...