目录
一:跨域问题的由来
二:服务端允许跨域
一:使用HttpContext允许跨域请求
二:使用扩展特性允许跨域请求
三:使用管道中间件允许跨域请求
一:跨域问题的由来
跨域问题其实是浏览器所限定的,同源策略,由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 _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();