ASP.NET Core 8 Web API Cors 仅被阻止进入 POST

问题描述 投票:0回答:1

这是我的

Program.cs
文件:

using BackendTemplate.Utils;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.IdentityModel.Tokens;
using System.Text;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

builder.Services.AddAuthorization();

builder.Services.AddCors(o => o.AddPolicy("MyPolicy", builder =>
{
    builder.WithOrigins("*")
           .AllowAnyMethod()
           .AllowAnyHeader()
           .AllowAnyOrigin();
}));

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();

app.UseCors("MyPolicy");
app.UseAuthentication();
app.UseAuthorization();

app.MapControllers();

app.Run();

这是我的控制器

[HttpPost]
public ApiResponse<string> Post([FromBody] UsrUser user)
{
    // .....
}

POST
会产生CORS错误;
GET
工作正常。

这是我在 Angular 控制台上的错误:

从源“http://localhost:4200”访问“https://mydns/api/login”处的 XMLHttpRequest 已被 CORS 策略阻止:请求中不存在“Access-Control-Allow-Origin”标头资源。

我不明白如何解决这个问题,这是我第一次遇到这种情况。

post cors asp.net-core-webapi
1个回答
0
投票

我注意到您遇到的错误,这些错误在使用 ASP.NET Web API 和 JavaScript 框架时很常见。在这种情况下,我建议选择使用 JavaScript 的 XMLHttpRequest,而不是 Angular 支持的方法。

下面是XMLHttpRequest的基本示例,相信你已经很熟悉了。

const xhr = new XMLHttpRequest();
xhr.open('POST', url, true);
xhr.setRequestHeader('Content-Type', 'application/json');
const requestBody = JSON.stringify(data);
xhr.send(requestBody);
xhr.onreadystatechange = function() {
  if (xhr.readyState === XMLHttpRequest.DONE) {
    if (xhr.status === 200) {
      const response = JSON.parse(xhr.responseText);
      console.log('Response:', response);
    } else {
      console.error('Error:', xhr.status, xhr.statusText);
    }
  }
};

您能验证一下这个解决方案是否有效吗?一旦确认,我将提供其背后的基本原理,并继续将当前代码调整为 Angular。

© www.soinside.com 2019 - 2024. All rights reserved.