Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .NET Core WebAPI/Angular project-飞行前响应中的访问控制允许标头不允许请求标头字段内容类型_C#_Angular_.net Core - Fatal编程技术网

C# .NET Core WebAPI/Angular project-飞行前响应中的访问控制允许标头不允许请求标头字段内容类型

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

我已经和这个问题争论了大约30个小时了,但我似乎还是过不去。我在.NET CORE 3.0.1 WebAPI项目中遇到CORS问题,在我的Angular项目调用时抛出以下错误:

在“”处访问XMLHttpRequest (从“”重定向)从 源“”已被CORS策略阻止: 不允许请求标头字段内容类型 访问控制允许飞行前响应中的标头

我在startup.cs文件中设置了CORS,如下所示:

Startup.cs中的ConfigureServices方法:

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返回的值处理重定向