.Net Core使用Cors实现Api跨域控制

一、导入包

 

.Net Core 需要引用一个包  Microsoft.AspNetCore.Cors,建议获取当前最新稳定版

 

 

二、跨域配置

 

让接口实现跨域,需要配置 Startup.cs 两个地方:

public void ConfigureServices(IServiceCollection services)
        {

            //添加cors 服务 配置跨域处理            
            services.AddCors(options =>
            {
                options.AddPolicy("any", builder =>
                {
                    builder.AllowAnyOrigin() //允许任何来源的主机访问
                    .AllowAnyMethod()  //允许任何HTTP方法
                    .AllowAnyHeader(); //允许所有的请求头
                    //.AllowCredentials();//允许跨域凭据,如cookie
                });
            });
            
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseHsts();
            }

       app.UseRouting();
//启用Cors。必须将 UseCors 置于 UserRouting 之后,但在 UserAuthorization 之前 app.UseCors("any");        app.UseAuthorization();
app.UseHttpsRedirection(); app.UseMvc(); }

 

上面的代码是允许所有的跨域访问的设置,但是一般情况下,我们为了业务的安全肯定只会对访问做一些控制,不同的接口访问权限不同。这里时候我们需要做配置做一些修改。

下面我们做了两种跨域处理的情况。

 

public void ConfigureServices(IServiceCollection services)
{
    //跨域            
    string[] Origins = Configuration["WhiteHosts"].Split(",");
    services.AddCors(options =>
    {                
        options.AddPolicy("CheckPolicy",
            builder =>
            {
                builder.WithOrigins("https://www.example.com","https://www.baidu.com")
                .AllowAnyHeader()
                .AllowAnyMethod();                        
            });
options.AddPolicy(
"NoPolicy", builder => { builder.AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader(); }); }); }
app.UseRouting();

//这里默认启用的配置是CheckPolicy
app.UseCors("CheckPolicy");

app.UseAuthorization();

 

CheckPolicy:是只有请求接口的主机是 https://www.example.com https://www.baidu.com 访问接口,相当于限制域名,其实这里不单单可以限制域名,还可以限制网络安全协议,端口等

NoPolicy:是允许所有的主机访问接口

这两个模式对请求方法和请求头都没有做要求。

 

 

三、具体使用

 

可以在控制器 Controller 或者 Action 方法上

这里可以直接在整个控制器上,加上 [EnableCors] 标签,也可以在单独的 Action 上加上标签。

[Route("[controller]/[action]")]    
public class HomeController : BaseApiController
{

        [HttpPost]
        [EnableCors("NoPoliy")] //允许所有主机访问
        public async Task<string> Token(LoginInputDTO input)
        {
            //业务代码
            return null;  
        }

         [HttpGet]
        [EnableCors]  //默认启用的配置
        public async Task<string> GetName(string userName)
        {
            //业务代码
            return userName;  
        }  

 

posted @ 2018-10-07 14:44  leoxuan  阅读(534)  评论(0编辑  收藏  举报