Задать вопрос
danila_net
@danila_net
Изучаю CLR, C#, ASP.NET

Почему блокируется CORS POST запрос, хотя GET запросы работают?

Есть приложение: серверная часть написана на .net8, клиентская часть - на React.
Используется windows аутентификация.
Локально работают и post и get запросы, а после публикации на IIS - POST запросы не работают, а GET работают.
файл Program.cs
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using Api_S.Models;
using Microsoft.AspNetCore.Authentication.Negotiate;
using Microsoft.AspNetCore.Cors.Infrastructure;

var builder = WebApplication.CreateBuilder(args);

var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
builder.Services.AddDbContext<GENERALContext>(options =>
    options.UseSqlServer(connectionString));
builder.Services.AddDatabaseDeveloperPageExceptionFilter();

builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

builder.Services.AddCors(options => {
options.AddPolicy(name: "MyAllowSpecificOrigins", 
    policy => 
    {
policy
        .WithOrigins("http://localhost:3000", "http://s38vm:84", "https://localhost:3000", "http://s38vm:83", "https://s38vm:84")
        .AllowAnyHeader() 
        .AllowAnyMethod() 
        .AllowCredentials(); }); });
 
builder.Services.AddAuthentication(NegotiateDefaults.AuthenticationScheme)
    .AddNegotiate();
builder.Services.AddAuthorization(options =>
{
    options.FallbackPolicy = options.DefaultPolicy;
});

builder.Services.AddControllers();

var app = builder.Build();

app.UseCors("MyAllowSpecificOrigins");

if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseAuthentication();
app.UseAuthorization();
app.MapControllers();
app.Run();

Так организован POST запрос в React:
await fetch(      
        'http://s38vm:84/api/Employes/Posttabel'        
          , {
          method: 'post',          
          headers: { 'Content-Type': 'application/json', }, 
          body: JSON.stringify(tabnn),  
          credentials: "include",        
          }    
        ).then(res => {
          if (!res.ok) {   
            console.log("ОШИБКА:"); 
          }
          else {
             return res.json();             
          }
       }) 
       .then(res => {
        setUser(res);         
      })         
    };
  • Вопрос задан
  • 42 просмотра
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Для POST-запроса, подпадающего под политику CORS, браузеры предварительно отправляют preflight-запрос OPTIONS. Бэкенд должен обрабатывать запрос OPTIONS и возвращать ответ 20x с установленными CORS-заголовками.
https://developer.mozilla.org/en-US/docs/Glossary/...
Ответ написан
@mvv-rus
Настоящий админ AD и ненастоящий программист
Есть подозрение, что к s38vm (это имя компьютера, да?) при запросе из браузера добавляется доменный суфикс компьютера. Проверяйте по логам IIS, на какое имя у вас приходят запросы POST.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы