主题
跨域处理
如果系统之间需要交互,通常需要进行特殊的配置才能进行通讯。
什么是跨域
浏览器的安全性限制了网页向不同域发送请求,这种限制称为同源策略。同源策略防止恶意站点从另一站点读取敏感数据。有时,你可能希望允许其他站点对你的应用进行跨域请求。这就是跨域问题。
解决跨域的方法
要解决跨域问题,常用的方法有以下几种:
- JSONP:通过动态创建
<script>标签,利用src属性实现跨域请求,但仅支持 GET 请求。 - CORS(跨域资源共享):服务器端设置响应头中的
Access-Control-Allow-Origin字段,允许指定的域进行跨域请求。 - 代理服务器:在服务器端设置一个代理,将前端请求转发给目标域,而不是直接从浏览器发送跨域请求。
- WebSocket:使用 WebSocket 协议进行通信,WebSocket 协议没有同源策略的限制。
- Nginx 推荐
信息
跨域问题仅存在于浏览器环境中,对于服务器端来说不存在跨域问题。
在 ASP.NET Core 中解决跨域
启用默认策略和中间件的 CORS
在 ASP.NET Core 中,可以通过配置 CORS 中间件来解决跨域问题。以下是一个示例配置:
csharp
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddCors(options =>
{
options.AddDefaultPolicy(policy =>
{
policy.WithOrigins("http://example.com", "http://www.contoso.com")
.AllowAnyHeader()
.AllowAnyMethod();
});
});
builder.Services.AddControllers();
// 启用服务
var app = builder.Build();
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseCors(); // 启用 CORS 中间件
app.UseAuthorization();
app.MapControllers();
app.Run();注意事项
- 通常,在
UseCors之前调用UseStaticFiles。 - 使用 JavaScript 跨站点检索静态文件的应用必须在
UseStaticFiles之前调用UseCors。
使用属性启用 CORS
可以将不同的 CORS 策略应用于具有 [EnableCors] 属性的控制器、页面模型或操作方法。如果将 [EnableCors] 属性应用于控制器、页面模型或操作方法,并且在中间件中启用了 CORS,则会应用两种策略。建议不要合并策略,使用 [EnableCors] 属性或中间件,两者不能同时使用。
示例
csharp
[EnableCors("MyPolicy")]
public class MyController : ControllerBase
{
[HttpGet]
public IActionResult Get()
{
return Ok("This is a CORS-enabled endpoint.");
}
}禁用 CORS
[DisableCors] 属性不会禁用通过终结点路由已启用的 CORS。
总结
更多跨域相关知识可查看官方文档。