当前位置: 首页 > 知识库问答 >
问题:

当超文本传输协议从角6发布到. netcore 2.0 webapi时,交叉起源请求被阻止

严烨
2023-03-14

我正在尝试对angular 6应用程序使用Jwt身份验证。尽管我将cors中间件添加到了我的应用程序中。netcore 2 webapi我反复出现以下错误:

"阻止跨源请求:相同源策略禁止读取http://localhost:5000/api/auth/login.的远程资源(原因:CORS请求未成功)。"

Angular6超文本传输协议:

浏览器cors错误指示:

Cors中间件在。netcore2 webapi:

后角超文本传输协议

export class LoginComponent {
  invalidLogin: boolean;

  constructor(private router: Router, private http: HttpClient) { }

  login(form: NgForm) {
    let credentials = JSON.stringify(form.value);
    this.http.post("http://localhost:5000/api/auth/login", credentials, {
      headers: new HttpHeaders({
        "Content-Type": "application/json"
      })
    }).subscribe(response => {
      let token = (<any>response).token;
      localStorage.setItem("jwt", token);
      this.invalidLogin = false;
      this.router.navigate([""]);
    }, err => {
      this.invalidLogin = true;
    });
  }
}

Cors中间件正在启动中。cs文件

 public void ConfigureServices(IServiceCollection services)
            {
               services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
                    .AddJwtBearer(options =>
                    {
                        options.TokenValidationParameters = new TokenValidationParameters
                        {
                            ValidateIssuer = true,
                            ValidateAudience = true,
                            ValidateLifetime = true,
                            ValidateIssuerSigningKey = true,

                            ValidIssuer = "http://localhost:5000",
                            ValidAudience = "http://localhost:5000",
                            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("superSecretKey@345"))
                        };
                    }); 

services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

                 services.AddCors(cfg=>cfg.AddPolicy("ClientDomain",builder=>builder.WithOrigins("http://localhost:4200")));
            }


            public void Configure(IApplicationBuilder app,IHostingEnvironment env)
            {
                if (env.IsDevelopment())
                {
                    app.UseDeveloperExceptionPage();
                }
                else
                {
                    app.UseHsts();
                }

                app.UseHttpsRedirection();
                app.UseAuthentication();
                app.UseCors("ClientDomain");
                app.UseMvc();
            }
        }

共有3个答案

谢奕
2023-03-14

您需要做的只是:

1) 安装Microsoft软件包。AspNetCore。努吉的科尔斯

2)放代码服务。Startup.cs的配置服务()方法中的addCors()

3) 输入代码

app.UseCors(构建器=

在启动的Configure()方法中。在http重定向和身份验证(如果有)之前进行cs。

詹甫
2023-03-14
public void ConfigureServices(IServiceCollection services)
{
 services.AddCors(options =>
            {
                options.AddPolicy("AllowAll", p =>
                {
                    p.AllowAnyOrigin()
                        .AllowAnyHeader()
                        .AllowAnyMethod();
                });
            });
}


public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{

  app.UseCors("AllowAll");
}
章琛
2023-03-14

问题似乎是您正在发送一个HTTP请求,但是您的Cors中间件在管道中注册较晚,并且从未在HTTP请求上调用,因为

app.UseHttpsRedirection();
app.UseAuthentication();

换句话说:当您的请求在http上时,UseHttpsRedirection中间件将使管道短路,并在飞行前返回一个响应,而不包含所需的CORS头。如果您通过https进行操作,但用户未经授权,则同样适用。

为了允许CORS超文本传输协议(或重定向之前)和未经授权的用户,您必须在上面的行之前注册中间件

// now CORS is handled before https redirection & before authentication
app.UseCors("ClientDomain");
app.UseHttpsRedirection();
app.UseAuthentication();
app.UseMvc();

始终记住,中间件是按照它们的注册顺序调用的(UseXxx调用)。

琐事:当您获得任何中间件的异常时,异常中间件将清除标题。因此,抛出异常的方法将不包含cors头,即使cors中间件注册是正确的

 类似资料:
  • 我正在使用GWT和Spring controller来管理http流量。有些请求可能需要很长时间,但我希望在超过给定时间时终止请求。 我如何配置超时Spring。我也使用Apache Tomcat 7.0。我试图在tomcat上inrease最大线程,但有一段时间tomcat工作缓慢,因为请求线程不会死。

  • 这些天我正在学习如何使用谷歌排球。快速联网非常方便。似乎所有的请求都在Volley的后台运行。例如: 使用上面的代码,我们可以进行一个在后台运行的POST调用(非阻塞方式)。现在我的问题是:是否有可能以阻塞的方式进行POST呼叫?为什么我需要阻塞方式来进行REST呼叫?因为有些电话,比如签到,应该在做其他事情之前完成。 谢谢

  • 我用Go编写了一个简单的服务器: 以及一个用Python编写的用于测试的简单客户端。以下是代码: 每次客户端访问服务器时,服务器都会产生这个错误: 我知道如何在Go中处理JSON Post请求 Python版本==3.4 Go版本==1.7 先谢谢你。

  • 当我试图从返回JSON的Symfony API获取Angular数据时,我目前面临一个错误: “阻止跨源请求:同一源策略不允许读取位于的远程资源。”http://localhost:8000/customers. (原因:缺少CORS标头“访问控制允许原点”。) 以下是完整结果的截图: 我知道这个问题已经被问了很多次,但我找不到一个有效的答案。 当我不尝试在api控制器中检索$session时,它

  • 我有以下curl命令,它在bash shell中运行良好 我现在想通过一个简单的网页运行这个按钮点击。这是我的Javascript 但是当我通过网页按钮点击运行这个javascript时,它给我以下错误“网络错误:500内部服务器错误-http://ec2-54-226-250-92.compute-1.amazonaws.com:8080/ocr”,我的成功()方法永远不会被调用。 正如我所说,

  • 我有专有的基于http的API要从JMeter测试。不幸的是,API的一些endpoint希望http DELETE方法带有请求体(我知道它的API设计有问题,使用DELETE with request body,但我无法更改该API,需要对其进行测试)。 如何从JMeter测试它?似乎标准的HttpRequest采样器在没有任何警告的情况下默默忽略了我的身体有效载荷。(当我在《邮递员》中尝试它时