C# .NET Core WebAPI/Angular project-飞行前响应中的访问控制允许标头不允许请求标头字段内容类型
我已经和这个问题争论了大约30个小时了,但我似乎还是过不去。我在.NET CORE 3.0.1 WebAPI项目中遇到CORS问题,在我的Angular项目调用时抛出以下错误: 在“”处访问XMLHttpRequest (从“”重定向)从 源“”已被CORS策略阻止: 不允许请求标头字段内容类型 访问控制允许飞行前响应中的标头 我在startup.cs文件中设置了CORS,如下所示: Startup.cs中的ConfigureServices方法:C# .NET Core WebAPI/Angular project-飞行前响应中的访问控制允许标头不允许请求标头字段内容类型,c#,angular,.net-core,C#,Angular,.net Core,我已经和这个问题争论了大约30个小时了,但我似乎还是过不去。我在.NET CORE 3.0.1 WebAPI项目中遇到CORS问题,在我的Angular项目调用时抛出以下错误: 在“”处访问XMLHttpRequest (从“”重定向)从 源“”已被CORS策略阻止: 不允许请求标头字段内容类型 访问控制允许飞行前响应中的标头 我在startup.cs文件中设置了CORS,如下所示: Startup.cs中的ConfigureServices方法: services.AddCors(option
services.AddCors(options => options.AddPolicy("CorsPolicy", p => p
.WithOrigins("http://localhost:4200")
.AllowAnyMethod()
.WithHeaders("content-type")
.AllowCredentials()
));
app.UseCors("CorsPolicy");
在Startup.cs中配置方法:
services.AddCors(options => options.AddPolicy("CorsPolicy", p => p
.WithOrigins("http://localhost:4200")
.AllowAnyMethod()
.WithHeaders("content-type")
.AllowCredentials()
));
app.UseCors("CorsPolicy");
从Angular服务进行的API调用
resetpassword(model: any) {
return this.http.post(this.baseUrl + 'forgotpassword', model);
}
控制员:
[AllowAnonymous]
[EnableCors("CorsPolicy")]
[HttpPost("forgotpassword")]
public async Task<IActionResult> ForgotPassword(SendPasswordResetDto sendPasswordReset)
{
if (sendPasswordReset.Email == null)
{
return NotFound("Please enter a valid email address");
}
var user = await _userManager.FindByEmailAsync(sendPasswordReset.Email);
// If the email does not exist, return null
if (user == null)
{
return Redirect($"{_configuration["ViewUrl"]}/#/emailverified");
}
// If the user email does exist, create a password reset token and encode it in a browser friendly way
var forgotPasswordToken = await _userManager.GeneratePasswordResetTokenAsync(user);
var encodedToken = Encoding.UTF8.GetBytes(forgotPasswordToken);
var validToken = WebEncoders.Base64UrlEncode(encodedToken);
// Send an email to the user with the reset email link
string url = $"{_configuration["ViewUrl"]}/#/changepassword?email={user.Email}&token={validToken}";
await _MailRepository.SendEmailAsync(user.Email, "Password Reset", $"<h1>You have requested to reset your password.</h1> <p>Please click <a herf='{url}'>this link</a> to reset your password. If it does not work, please copy and paste this link into your browser " + url + "</p>");
return Redirect($"{_configuration["ViewUrl"]}/#/emailverified");
}
我真的无法克服这一点,这简直让我发疯。这里有我遗漏的东西吗?我已经将“content-type”标题直接添加到CORS策略中,但它只是忽略了它。我到处寻找,在我的项目中尝试了大约20多种不同的设置方法。我还尝试过清除浏览器缓存,并使用尚未在该项目上使用过的不同浏览器,以防缓存影响它,并且查看app.UseCors(“CorsPolicy”)在configure方法中的位置,似乎没有什么能让它起作用
任何人都可以发现我遗漏了什么吗?除了使用以下语句外,CORS似乎在项目的其他任何地方都可以正常工作
return Redirect($"{_configuration["ViewUrl"]}/#/emailverified");
因此,在与此抗争了一周的大部分时间后,我决定不在控制器中使用redirect return语句,而是让前端angular项目根据API返回的值处理重定向 CORS似乎在项目中的其他任何地方都可以正常工作,除非使用以下语句
return Redirect($"{_configuration["ViewUrl"]}/#/emailverified");
因此,在与此抗争了一周的大部分时间后,我决定不在控制器中使用redirect return语句,而是让前端angular项目根据API返回的值处理重定向