这是我的
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”标头资源。
我不明白如何解决这个问题,这是我第一次遇到这种情况。
我注意到您遇到的错误,这些错误在使用 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。