javascript - 没有访问控制允许 Origin IIS
问题描述
我已经按照这个角度 7 的教程来制作一个CRUD
函数。我将项目发布到我的项目IIS
中,但出现错误(图片)
从源“ http://localhost:4200 ”访问“ http://192.168.120.178:2030/Api/Employee/UpdateEmployeeDetails/ ”的 XMLHttpRequest已被 CORS 策略阻止:否“访问控制允许源”请求的资源上存在标头。
我试图添加标题Update Code
以允许 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);
}
API 代码
[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);
}
但是,如果我使用 localhost API 运行我的项目,那没关系。但是在发布(IIS)中,我得到了 CORS 错误。我已经花了一整天,但不幸的是我没有找到解决问题的方法。
解决方案
TL;DR:实际上,您的 CORS 标头方向错误。
API(服务器端)需要返回 CORS 标头,作为向浏览器发出信号的一种方式,即您希望在(客户端)提供 Angular UI 的任何域来调用您的 API。
如果您考虑一下,客户端/浏览器设置这些 CORS 标头是没有意义的,因为客户端很容易被不良行为者(例如 chrome 插件、外国 javascript 等)破坏,并且如果客户端负责这些 CORS 标头,那么让它们成为黑客想要的样子真的很容易。相反,它们需要来自服务器端 - 由Access-Control-*
前缀暗示。这是服务器将它期望前端访问它的域列入白名单的方式。
另一种思考方式是,如果他们将 CORS 标头限制为仅允许,我无法创建直接访问 Facebook API 的网站,*.facebook.com
因为我不拥有该域。CORS 也是一个保护层,可防止不良行为者使用您的服务器端 API 并欺骗您的前端来捕获人们的数据。
推荐阅读
- docker - Docker`COPY`文件不起作用
- python-3.x - 逐行读取和分析输出数据
- batch-file - Sqlcmd 参数传递给 sql 脚本文件
- java - 如何制作自定义文本视图?
- c# - 使用 mshtml 和 shdocview vb.net/C# 捕获 Web 元素
- php - 在 Laravel-5 中取消定义方法?
- selenium - 在另一个选项卡中打开相同的 URL 时,Selenium 未显示活动会话被拒绝
- node.js - 在 ejs 模板中获取查询字符串
- c# - 授权 - .net 核心中的声明集
- amazon-web-services - Ruby AWS 开发工具包 (v2/v3) 标记 Spot 实例