如何实现跨域请求而不受同源策略限制?

2026-03-30 14:191阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计749个文字,预计阅读时间需要3分钟。

如何实现跨域请求而不受同源策略限制?

该案例示例基于以下技术栈:.NET Core MVC、Web API、跨域请求、jQuery。结构如下:

第一步:创建.NET Core API项目

查看端口号:端口号可修改,创建API控制器,使用HttpGet属性创建Get方法。

csharp[HttpGet]public string Get(){ return Hello World;}

该案例基于:.net Core MVC + WebAPI+跨域请求+jquery

结构如下:

如何实现跨域请求而不受同源策略限制?

第一步:​​创建.net​​ Core API项目 Api

查看端口号:端口号可以修改

创建Api控制器

HttpGet]
public string Get()
{
return "Hello World";
}

[HttpPost]
public string Post()
{
return $"当前服务器时间:{DateTime.Now}";
}


第二步:添加跨域策略

在Api项目的startuo.cs中添加

public void ConfigureServices(IServiceCollection services)
{
// 添加跨域
services.AddCors(options =>
{
options.AddPolicy("CorsPolicy", builder =>
{
builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader();
});
});

services.AddControllers();
}

//使用允许跨域请求
app.UseCors("CorsPolicy");

app.UseEndpoints(endpoints =>
{
//所有请求都应用跨域请求策略
endpoints.MapControllers();
});


第三步:创建第二个项目 cross_domain

搭建前端页面

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta localhost:15136/api/Default',
cache: false,
success: function (res) {
window.alert(res);
},
error: function (err) {
window.alert(err.status);
}
});
});

$('#post').click(function () {
$.ajax({
type: 'post',
url: 'localhost:15136/api/Default',
cache: false,
success: function (res) {
window.alert(res);
},
error: function (err) {
window.alert(err.status);
}
});
});
</script>
</body>
</html>


如果直接点击按钮,会发现弹出提示框显示​​status​​为​​0​​,如下图所示。状态值为​​0​​就表示产生了跨域错误。

第四步:设置多项目启动


最后效果:


如果希望只有指定的前端项目能够访问,则可以做一系列的约束操作,代码如下:

// 添加跨域
services.AddCors(options =>
{
options.AddPolicy("CorsPolicy", builder =>
{
builder.WithOrigins("127.0.0.1:5500")
.WithMethods("GET", "POST")
.AllowAnyHeader()
.AllowCredentials();
});
});

在上面的代码中,规定了只有​​127.0.0.1:5500​​可以访问后台资源,同时也规定了后台只接受​​GET​​和​​POST​​请求模式。

本文共计749个文字,预计阅读时间需要3分钟。

如何实现跨域请求而不受同源策略限制?

该案例示例基于以下技术栈:.NET Core MVC、Web API、跨域请求、jQuery。结构如下:

第一步:创建.NET Core API项目

查看端口号:端口号可修改,创建API控制器,使用HttpGet属性创建Get方法。

csharp[HttpGet]public string Get(){ return Hello World;}

该案例基于:.net Core MVC + WebAPI+跨域请求+jquery

结构如下:

如何实现跨域请求而不受同源策略限制?

第一步:​​创建.net​​ Core API项目 Api

查看端口号:端口号可以修改

创建Api控制器

HttpGet]
public string Get()
{
return "Hello World";
}

[HttpPost]
public string Post()
{
return $"当前服务器时间:{DateTime.Now}";
}


第二步:添加跨域策略

在Api项目的startuo.cs中添加

public void ConfigureServices(IServiceCollection services)
{
// 添加跨域
services.AddCors(options =>
{
options.AddPolicy("CorsPolicy", builder =>
{
builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader();
});
});

services.AddControllers();
}

//使用允许跨域请求
app.UseCors("CorsPolicy");

app.UseEndpoints(endpoints =>
{
//所有请求都应用跨域请求策略
endpoints.MapControllers();
});


第三步:创建第二个项目 cross_domain

搭建前端页面

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta localhost:15136/api/Default',
cache: false,
success: function (res) {
window.alert(res);
},
error: function (err) {
window.alert(err.status);
}
});
});

$('#post').click(function () {
$.ajax({
type: 'post',
url: 'localhost:15136/api/Default',
cache: false,
success: function (res) {
window.alert(res);
},
error: function (err) {
window.alert(err.status);
}
});
});
</script>
</body>
</html>


如果直接点击按钮,会发现弹出提示框显示​​status​​为​​0​​,如下图所示。状态值为​​0​​就表示产生了跨域错误。

第四步:设置多项目启动


最后效果:


如果希望只有指定的前端项目能够访问,则可以做一系列的约束操作,代码如下:

// 添加跨域
services.AddCors(options =>
{
options.AddPolicy("CorsPolicy", builder =>
{
builder.WithOrigins("127.0.0.1:5500")
.WithMethods("GET", "POST")
.AllowAnyHeader()
.AllowCredentials();
});
});

在上面的代码中,规定了只有​​127.0.0.1:5500​​可以访问后台资源,同时也规定了后台只接受​​GET​​和​​POST​​请求模式。