Angular2对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头

Posted

技术标签:

【中文标题】Angular2对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头【英文标题】:Angular2 Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource 【发布时间】:2017-09-08 05:20:47 【问题描述】:

我试图发出一个简单的 POST 请求以在 .NET 中使用 API 创建一个帐户,但如标题所述,它失败并出现警告。 在 Postman(api 测试工具)中执行相同的请求会返回状态 200:好的,一切正常,数据已保存到数据库中。 但我不能在我的网络应用程序中做同样的事情,这是我的代码:

  register()

let details = 
  Serviceurl: this.serviceUrl,
  CompanyName: this.companyName,
  CompanyFullName: this.companyFullName,
  LanguageCulture: this.languageCulture,
  IsNewUser: this.isNewUser,
  User: 
    UserName: this.userName,
    FirstName: this.firstName,
    LastName: this.lastName,
    Email: this.email,
    Password: Md5.hashStr(this.password)
  


this.authService.createAccount(details)
.then((result) => 

, (err) => 

);

然后是我的 authService 中的请求本身:

  createAccount(details)

return new Promise((resolve, reject) => 

    let headers = new Headers();
    headers.append('Content-Type', 'application/json');

    this.http.post('http://SITEADDRESS/api/IM_Customers/CreateNew', JSON.stringify(details), headers: headers)
      .subscribe(res => 
        let data = res.json();
        resolve(data);

      , (err) => 
        reject(err);
      );

);

【问题讨论】:

你试过谷歌吗?这是由浏览器的 CORS 策略引起的。邮递员不需要它。见developer.mozilla.org/en-US/docs/Web/HTTP/… No 'Access-Control-Allow-Origin' header in Angular 2 app的可能重复 是的,我尝试用谷歌解决它,我认为我启用了这个,但我的客户端有问题 【参考方案1】:

您需要在 API 项目中启用 No-Access-Control-Allow-Origin。 在 API 项目中,startup.cs:

public void Configure(IApplicationBuilder app)
    app.UseCors(builder=>builder.AllowOrigin().AllowAnyMethod().AllowAnyHeader());

【讨论】:

以上是关于Angular2对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头的主要内容,如果未能解决你的问题,请参考以下文章

角度 2 与 auth0 读取所有用户错误 对预检请求的响应未通过访问控制检查:没有“Access-Control-Allow-Origin”

“对预检请求的响应未通过访问控制检查”是啥意思?

对预检请求的响应未通过访问控制检查错误

对预检请求的响应未通过访问控制检查

对预检请求的响应未通过访问控制检查

对预检请求的响应未通过访问控制检查