有时候我们在做web前端和后台联调的时候会发现前端无法访问后台。因为现在的前端开发大多数都是大前端开发模式,所有前端访问asp.net core后台属于跨域请求。现在我们来看看怎么开启跨域访问。

asp.net core的框架提供了高扩展性,高灵活性,开启跨域请求也比较简单,主要是针对以下位置做修改:

  • 服务中注册Http访问策略
  • 引入app.cors
  • 控制器中开启跨域访问

服务中注册Http访问策略

找到startup.cs文件,并在ConfigureServices方法中添加以下代码:

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddCors(options =>
            {
                options.AddDefaultPolicy(
                    builder =>
                    {
                        builder.WithOrigins("*")
                            .AllowAnyHeader()
                            .AllowAnyMethod().AllowAnyOrigin();
                    });
            });
            //省略...
        }

引入app.cors

找到startup.cs文件,并在Configure方法中添加以下代码:

 public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseHttpsRedirection();
            app.UseRouting();
            //app.UseCors 核心代码 start
            app.UseCors();
            //app.UseCors 核心代码 end
            app.UseAuthorization();
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }

这里要特别注意,app.UseCors必须放在app.UseRouting()app.UseAuthorization()中间。

控制器中开启跨域访问

找到对应的控制器,添加特性标签EnableCors


    [EnableCors]
    [ApiController]
    [Route("[controller]")]
    public class LoginController : ControllerBase
    {
        private readonly ILogger<LoginController> _logger;

        public LoginController(ILogger<LoginController> logger)
        {
            _logger = logger;
        }

        [HttpGet]
        public bool Get()
        {
            return true;
        }
    }

详情请阅读微软官方文档,点我跳转!


本文会经常更新,请阅读原文: https://huchengv5.gitee.io//post/asp.net-core-%E5%A6%82%E4%BD%95%E5%BC%80%E5%90%AF%E5%85%81%E8%AE%B8%E8%B7%A8%E5%9F%9F%E8%AE%BF%E9%97%AE.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

知识共享许可协议 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名胡承(包含链接: https://huchengv5.gitee.io/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系