目录
一:跨域问题的由来
跨域问题其实是浏览器所限定的,同源策略,由NetScape提出的一个著名的安全策略。所谓的同源,指的是协议、域名、端口相同。浏览器处于安全方面的考虑,只允许本域名下的接口交互,不同源的客户端脚本,在没有明确授权的情况下,浏览器认为这个资源不安全,不能用。
二:服务端允许跨域
一:使用HttpContext允许跨域请求
/// <summary>
/// Get请求
/// 获取数据
/// </summary>
/// <returns></returns>
[HttpGet]
public object GetData()
{
//服务端允许跨域
HttpContext.Response.Headers.Add("Access-Control-Allow-Origin", "*");
return new
{
Id = 123,
Name = "VinCente"
};
}
二:使用扩展特性允许跨域请求
using Microsoft.AspNetCore.Mvc.Filters;
namespace Study_ASP.NET_Core_MVC.WebApi.Utility
{
public class CustomCorsActionFilterAttribute : Attribute, IActionFilter
{
//使用扩展特性允许跨域请求
public void OnActionExecuting(ActionExecutingContext context)
{
context.HttpContext.Response.Headers.Add("Access-Control-Allow-Origin", "*");
}
public void OnActionExecuted(ActionExecutedContext context)
{
throw new NotImplementedException();
}
}
}
在控制器中应用
/// <summary>
/// Get请求
/// 获取数据
/// </summary>
/// <returns></returns>
[HttpGet]
[CustomCorsActionFilter]
public object GetData()
{
//服务端允许跨域
//HttpContext.Response.Headers.Add("Access-Control-Allow-Origin", "*");
return new
{
Id = 123,
Name = "VinCente"
};
}
三:使用管道中间件允许跨域请求
//表示整个应用程序,调用CreateBuilder方法创建一个WebApplicationBuilder对象
var builder = WebApplication.CreateBuilder(args);
//向管道容器添加注册中间件
//添加注册Controller中间件
//添加注册Swagger中间件
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
//添加注册允许跨域请求
builder.Services.AddCors(policy =>
{
policy.AddPolicy("CorsPolicy", option => option.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod().WithExposedHeaders("X-Pagination"));
});
//配置管道容器中间件,构造WebApplication实例
var app = builder.Build();
//配置HTTP请求管道判断开发者模式
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
//向管道添加用于将HTTP请求重定向到HTTPS的中间件
app.UseHttpsRedirection();
//向管道添加用于身份鉴权授权中间件
app.UseAuthorization();
//向管道添加用于Controller中间件
app.MapControllers();
//向管道添加用于允许跨域请求的中间件
app.UseCors("CorsPolicy");
//向管道添加启动应用程序中间件
app.Run();