欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ASP.net Core跨域配置

程序员文章站 2024-01-21 19:49:52
...

我们在使用API加视图前后端分离时,一般情况WebAPI都是跨域请求,没有设置跨域一般会报以下错误

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:48057' is therefore not allowed access.

那么接下来我们说一下ASP.net Core的两种跨域:全局和区域

全局跨域:

打开Startup.cs文件,在ConfigureServices方法中添加以下代码

> 1.配置跨域处理,允许所有来源:

			//配置跨域处理,允许所有来源:
            services.AddCors(options =>
            options.AddPolicy("自定义的跨域策略名称",
            p => p.AllowAnyOrigin())
            );

> 2.允许一个或多个具体来源:

		//允许一个或多个具体来源:
		services.AddCors(options =>
        {
            // Policy 名稱 CorsPolicy 是自訂的,可以自己改
            options.AddPolicy("跨域规则的名称", policy =>
            {
                // 設定允許跨域的來源,有多個的話可以用 `,` 隔開
                policy.WithOrigins("http://localhost:3000","http://127.0.0.1")
                        .AllowAnyHeader()
                        .AllowAnyMethod()
                        .AllowCredentials();
            });
        });

以上两种按需求选择一种即可。
接着就是在Configure方法(中间件)中添加一下代码:

app.UseCors("自定义的跨域策略名称");//必须位于UserMvc之前 
app.UseMvc();

如果要全局配置跨域,要在中间件的路由配置中加上

.RequireCors(MyAllowSpecificOrigins)
示例:

			app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers().RequireCors(MyAllowSpecificOrigins);

                // 添加 signalR 服务
                // endpoints.MapHub<MessageHubs>("/Message");
            });

局部跨域第一种用法:

  1. ConfigureServices方法不变,删去Configure中的app.UseCors()方法
  2. .在Controller顶部或者Action方法顶部加上[EnableCors(“自定义的跨域策略名称”)]特性,例如
[EnableCors("自定义的跨域策略名称")]
[Route("api/[controller]")] 
public class ContactController : Controller

以上就可实现指定某个Controller或者Action跨域

禁止跨域:
禁止跨域在Controller或者Action加上[DisableCors]特性即可禁止跨域

[HttpGet("{id}")]
[DisableCors]
public string Get(int id)
{
  return "value";
}
相关标签: .net core 跨域