ASP.NET Core MVC 项目 WebApi与MinimalApi 跨域问题解决方案

目录

一:跨域问题的由来

二:服务端允许跨域

一:使用HttpContext允许跨域请求

二:使用扩展特性允许跨域请求

三:使用管道中间件允许跨域请求


一:跨域问题的由来

跨域问题其实是浏览器所限定的,同源策略,由NetScape提出的一个著名的安全策略。所谓的同源,指的是协议、域名、端口相同。浏览器处于安全方面的考虑,只允许本域名下的接口交互,不同源的客户端脚本,在没有明确授权的情况下,浏览器认为这个资源不安全,不能用。

二:服务端允许跨域

一:使用HttpContext允许跨域请求


        /// 
        /// Get请求
        /// 获取数据
        /// 
        /// 
        [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();
        }
    }
}

在控制器中应用


        /// 
        /// Get请求
        /// 获取数据
        /// 
        /// 
        [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();

你可能感兴趣的:(NET,.net,asp.net,.netcore,mvc)