首页 > 编程语言 >ASP.NET Core教程-跨域配置(CORS Configuration)

ASP.NET Core教程-跨域配置(CORS Configuration)

时间:2022-11-01 08:55:51浏览次数:68  
标签:Core ASP 跨域 ... app 配置 中间件 Cors public

更新记录
转载请注明出处:
2022年11月1日 发布。
2022年11月1日 从笔记迁移到博客。

说明

Cross-Origin Resource Sharing,跨域资源共享

配置方式

在ASP.NET Core中有2种方式配置跨越,中间件方式(middleware approach)特性修饰方式(attributes approach)

中间件方式一般用于配置全局的CORS配置。特性修饰方式配置跨域一般用于指定的控制器和动作。适用范围不同。

中间件方式配置Cors(Implementing CORS using the middleware approach)

开启UseCors() 中间件

具体实现实际上很简单,ASP.NET Core已经内置支持,只用开启 UseCors() 中间件即可。

打开Startup.cs文件,在配置开启CORS中间件即可。

namespace Catalog.API
{
    public class Startup
    {
       ...
        public void Configure(IApplicationBuilder app, IWebHostingEnvironment env)
        {
            ...
            //开启CORS
            app.UseCors(corsConfig =>
            {
                //具体的配置项
                corsConfig.AllowAnyOrigin();
            });
            ..
        }
    }
}

配置具体的Cors规则(直接在中间件中配置)

配置允许所有的域名。

app.UseCors(corsConfig =>
{
    //允许所有域名
	corsConfig.AllowAnyOrigin();
});

配置允许指定的域名。其他域名都会被block。

namespace Catalog.API
{
    public class Startup
    {
       ...
        public void Configure(IApplicationBuilder app, 
        IWebHostingEnvironment env)
        {
            ...
            app.UseCors(corsConfig =>
            {
                //配置允许的域名
                corsConfig.AllowAnyOrigin("https://panda666.com");
            });   
            ...
        }
    }
}

配置具体的Cors规则(在服务中定义规则 Policy,在中间件中调用)

namespace Catalog.API
{
    public class Startup
    {
      
        public void ConfigureServices(IServiceCollection services)
        {
            ...
            //在服务中增加Cors服务
            services.AddCors(corsOtions =>
            {
                //增加 Policy
                corsOtions.AddPolicy("BlogDomainPolicy", corsConfig => { 
			       //具体的配置项
                    corsConfig.WithOrigins("https://samuele.dev"); 
                });
            });
            ..
        }

        public void Configure(IApplicationBuilder app,IWebHostingEnvironment env)
        {
           ...
            //在中间件中启用Cors,并使用指定策略
            app.UseCors("BlogDomainPolicy");
           ...
        }
    }
}

在单独的扩展方法中定义Cors相关的配置

可以在ConfigureServices()中配置服务 和 Configure 配置中间件。为了提高可复用性、可维护性,还可以把相关的配置放入到自定义的扩展方法中。

在项目中添加Extensions文件夹。在Extensions文件夹下,添加ServiceCorsExtensions.cs类文件

image

然后在 ServiceCorsExtensions.cs 类文件中写入。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using WebApplication6;
using Microsoft.Extensions.DependencyInjection;
namespace WebApplication6.Extensions
{
    public static class ServiceCorsExtensions
    {
        /// <summary>
        /// 配置跨域访问扩展方法
        /// </summary>
        /// <param name="services"></param>
        public static void ConfigureCors(this IServiceCollection services) =>
            	//配置Cors
                services.AddCors(options =>
                {
                    options.AddPolicy("CorsPolicy", corsConfig =>
                    	corsConfig.AllowAnyOrigin() 	//配置允许的域名
                    		      .AllowAnyMethod()   	//配置允许的HTTP方法
                    			 .AllowAnyHeader()); 	//配置允许的头内容
                });
    }
}

说明:
AllowAnyOrigin()表示配置允许的域名,如果需要进行限制,可以使用WithOrigins("https://example.com")。
AllowAnyMethod()表示配置允许的HTTP方法,如果需要进行限制,可以使用WithMethods("POST", "GET")。
AllowAnyHeader()表示配置允许的头内容,如果需要进行限制,可以使用WithHeaders("accept", "contentype") 。

在Service中进行使用,在Startup.cs文件中的Startup类中
引入命名空间

using WebApplication6.Extensions;

配置服务,增加Cors服务。

public void ConfigureServices(IServiceCollection services)
{
    //添加服务,使用自定义的扩展方法
    services.ConfigureCors();
    services.AddControllers();
}

配置中间件,启动Cors中间件。

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    app.UseHttpsRedirection();
    app.UseStaticFiles();
    //使用跨域
    app.UseCors("CorsPolicy");
    //...
}

特性方式配置Cors(Implementing CORS using the attribute approach)

使用特性方式配置Cors,只在指定的Controller和Action上生效。配置和使用中间件配置大同小异。同样是先配置服务,在配置中间件。然后在指定的控制器或者动作方法上加入[EnableCors]特性修饰即可。

配置服务,增加Cors服务,并新增一个Policy策略。

builder.Services.AddCors(options =>
{
    options.AddPolicy("PandaPolicy", policyConfig =>
    {
        policyConfig.AllowAnyOrigin()
                    .AllowAnyHeader()
                    .AllowAnyMethod();
    });
});

配置中间件,增加 Cors 中间件。

//启用Cors中间件
app.UseCors();

引入命名空间

using Microsoft.AspNetCore.Cors;

使用 [EnableCors] 特性启用,需要指定我们设置好的Policy策略。

namespace Catalog.API.Controllers
{
    [Route("api/items")]
    [ApiController]
    [JsonException]
    [EnableCors("BlogDomainPolicy")]
    public class ItemController : ControllerBase
    {
    }
}

还可以在同一个控制器中,使用不同的 Policy 策略。

namespace Catalog.API.Controllers
{
    [Route("api/items")]
    [ApiController]
    [JsonException]
    //启用Cors
    [EnableCors("BlogDomainPolicy")]
    public class ItemController : ControllerBase
    {
        ...

        [HttpGet("{id:guid}")]
        //启用Cors,策略不同
        [EnableCors("GetByIdActionPolicy")]
        public async Task<IActionResult> GetById(string id)
        {
            ...
        }
    }
}

标签:Core,ASP,跨域,...,app,配置,中间件,Cors,public
From: https://www.cnblogs.com/cqpanda/p/16846544.html

相关文章

  • Asp.Net MVC 中的 Cookie讲解
    一、CookieCookie是请求服务器或访问Web页面时携带的一个小的文本信息。Cookie为Web应用程序中提供了一种存储特定用户信息的方法。Cookie的值是字符串类型,且对用户是......
  • jwt的ASP.NET MVC 身份验证
    jwt的ASP.NETMVC身份验证 JsonWebToken(jwt)        一种不错的身份验证及授权方案,与Session相反,Jwt将用户信息存放在Token的payload字段......
  • 【WPF依赖注入】开篇. NET Core 控制反转(IoC)和依赖注入(DI) IServiceCollection
    参考Microsoft.Extensions.DependencyInjection入门https://www.cnblogs.com/zcqiand/p/14257661.html原文:NETCore依赖注入的IServiceCollection 前置阅读在阅......
  • C# net core 从文件流中获取文件头、匹配文件类型
    常用文件的文件头如下:(以前六位为准)JPEG(jpg),文件头:FFD8FFPNG(png),文件头:89504E47GIF(gif),文件头:47494638TIFF(tif),文件头:49492A00WindowsBitmap(bmp),文件头:4......
  • 二、.Net Core搭建Ocelot
    Ocelot是系统中对外暴露的一个请求入口,所有外部接口都必须通过这个网关才能向下游API发出请求1、Nuget引用Ocelot(注意版本,我用的是16.0.1)2、根目录添加配置文件Ocelot.js......
  • Solr 8.11入门教程(2)创建core
    新建core添加core命令添加使用命令比较简单~$bin/solrcreate-cmytest[core名称]这样就添加完了。CoreAdmin就可以看到了。手动添加手动添加相对复杂一些,需要提......
  • cuda cores
    基本介绍从这个link看的:https://www.techcenturion.com/nvidia-cuda-cores/其中,抽象上这里表述较好理解:LetusconsideranexampletounderstandtheworkingofCUDA......
  • Solr 8.11入门教程(2)创建core
    新建core添加core命令添加使用命令比较简单~$bin/solrcreate-cmytest[core名称]这样就添加完了。CoreAdmin就可以看到了。手动添加手动添加相对复杂一些,需要提前创建目......
  • 初识Rasp——Openrasp代码分析
    初识Rasp——Openrasp代码分析@author:Drag0nf1y本文首发于奇安信安全社区,现转载到个人博客。原文链接:https://forum.butian.net/share/1959什么是RASP?Rasp的概念​ ......
  • Solr 8.11入门教程(2)新建core
    Solr8.11入门教程(2)新建core添加core命令添加使用命令比较简单~$bin/solrcreate-cmytest[core名称]这样就添加完了。CoreAdmin就可以看到了。手动添加手动......