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

目录

一:跨域问题的由来

二:服务端允许跨域

一:使用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 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();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vin Cente

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值