Javascript 无访问控制允许源IIS

Javascript 无访问控制允许源IIS,javascript,angular,iis,cors,Javascript,Angular,Iis,Cors,我使用angular 7来制作CRUD函数。我将项目发布到我的IIS中,但我有一个 CORS策略已阻止从源“”访问“”处的XMLHttpRequest:请求的资源上不存在“访问控制允许源”标头 我试图在updatecode中添加标题以允许CORS,但它是相同的 该错误也适用于其他功能(保存、删除) 角度代码 updateEmployee(employee: Employee): Observable<Employee> { const httpOptions = { header

我使用angular 7来制作
CRUD
函数。我将项目发布到我的
IIS
中,但我有一个

CORS策略已阻止从源“”访问“”处的XMLHttpRequest:请求的资源上不存在“访问控制允许源”标头

我试图在
updatecode
中添加标题以允许CORS,但它是相同的

该错误也适用于其他功能(保存、删除)

角度代码

updateEmployee(employee: Employee): Observable<Employee> {
const httpOptions = {
  headers: new HttpHeaders({
    'Content-Type': 'application/json',
    'Access-Control-Allow-Credentials': "true",
    'Access-Control-Allow-Headers': 'Content-Type',
    'Access-Control-Allow-Methods': 'GET',
    'Access-Control-Allow-Origin': '*'
  })
};
return this.http.put<Employee>(this.url + '/UpdateEmployeeDetails/',
  employee, httpOptions);
}
   [HttpPut]
        [Route("UpdateEmployeeDetails")]
        public IHttpActionResult PutEmaployeeMaster(EmployeeDetail employee)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            try
            {
                EmployeeDetail objEmp = new EmployeeDetail();
                objEmp = objEntity.EmployeeDetails.Find(employee.EmpId);
                if (objEmp != null)
                {
                    objEmp.EmpName = employee.EmpName;
                    objEmp.Address = employee.Address;
                    objEmp.EmailId = employee.EmailId;
                    objEmp.DateOfBirth = employee.DateOfBirth;
                    objEmp.Gender = employee.Gender;
                    objEmp.PinCode = employee.PinCode;

                }
                int i = this.objEntity.SaveChanges();

            }
            catch (Exception)
            {
                throw;
            }
            return Ok(employee);
        }
但是如果我使用本地主机API运行我的项目,那就没问题了。但是在发布(IIS)中,我得到了CORS错误。我已经花了整整一天的时间,但不幸的是我没有找到解决问题的办法;DR:实际上,您的CORS标题方向错误

API(服务器端)需要返回CORS头,作为向浏览器发送信号的一种方式,表明您希望Angular UI在哪个域上(客户端)调用API

如果你想一想,客户端/浏览器设置这些CORS头是没有意义的,因为客户端很容易被坏角色(如chrome插件、外来javascript等)破坏,如果客户端负责这些CORS头,让它们成为黑客想要的样子真的很容易。相反,它们需要来自服务器端-由
访问控制-*
前缀暗示。这是服务器将希望前端访问的域列入白名单的方式


另一种思考方式是,如果他们的CORS头被限制为只允许
*.Facebook.com
,我就无法创建一个直接访问Facebook API的网站,因为我不拥有该域名。CORS也是一个保护层,可以防止不良参与者使用服务器端API和欺骗前端来捕获人们的数据。

如果是.net core,则进入Startup.cs,并使用https为后端和前端提供服务,并启用CORS

public void ConfigureServices(IServiceCollection services)
{
...
      services.AddCors();
...
}


   public void Configure(IApplicationBuilder app)
   {
    ...
      app.UseCors(builder =>
            builder.WithOrigins("YOUR_FRONTEND_URL")
                   .AllowAnyHeader()
                   .AllowAnyMethod()
                   .AllowCredentials());
    ...
    }

Web API 2(以前的核心)

App\u Start\WebApiConfig.cs

public static void Register(HttpConfiguration config)

{

            var cors = new EnableCorsAttribute(

                origins: "YOUR_FRONTEND_URL",

                headers: "*",

                methods: "*");

            config.EnableCors(cors);
            ...
}

您正在请求(角度)中设置
访问控制允许-*
标题,但它们应该设置为响应(IIS),您需要的可能是@Mendy,我应该在标题名称和值中输入什么?名称应该是
访问控制允许来源
访问控制允许方法
,等等。。。,这些值将是
*
GET
,等等。“明白了吗?”门迪我把它当作指令加上去了。现在我又犯了一个新的错误<代码>对飞行前请求的响应未通过访问控制检查抱歉,我没有使用.net core。还添加了Web API 2的详细信息。
public static void Register(HttpConfiguration config)

{

            var cors = new EnableCorsAttribute(

                origins: "YOUR_FRONTEND_URL",

                headers: "*",

                methods: "*");

            config.EnableCors(cors);
            ...
}