Javascript 无访问控制允许源IIS
我使用angular 7来制作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
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);
...
}