.Net Core API CORS,锁定只有一个域(Angular app)

时间:2017-06-29 11:34:57

标签: angular asp.net-web-api asp.net-core cors

我有一个.net核心api,我只想接受来自一个域的呼叫。那里有一个Angular 4应用程序。

我正在创建像这样的cors政策......

    services.AddCors(options =>
        {
            options.AddPolicy("AllowSpecificOrigin",
                builder => builder.WithOrigins("http://www.test.com").AllowAnyHeader());
        });

我正在装载它......

  app.UseCors("AllowSpecificOrigin");

我原本预计只有来自域上的Angular应用程序的调用能够命中api,但是如果我在Chrome Postman中创建一个调用,我仍然可以直接命中api。

我做错了什么?我希望锁定除Angular应用程序之外的所有流量。

以下是我的startup.cs的更多细节......

    public Startup(IHostingEnvironment env)
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json", true, true)
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", true)
            .AddEnvironmentVariables();


        Configuration = builder.Build();
    }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();
        services.AddCors();

        services.Configure<AppSettings>(Configuration);
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
            app.UseCors(builder => builder.WithOrigins(new[] { "http://test.com" }) 
                .AllowCredentials()); 


            app.UseDeveloperExceptionPage();

            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    "default",
                    "{controller=ping}/{action=get}/{id?}");
            });

            app.UseStaticFiles();

        }

1 个答案:

答案 0 :(得分:0)

响应更容易:

  

CORS标头仅在跨域请求See that example

上发送

因此,当您在本地进行测试时,它无法正常工作。尝试在具有域的服务器上托管您的应用并使用邮递员进行呼叫。它不会起作用。

编辑:

好的,你的配置文件是不正确的。您需要在AddCors之前加AddMVC。因为,在执行管道中,框架将按启动时声明的顺序执行..

services.AddCors(options =>
        {
            options.AddPolicy("AllowSpecificOrigin",
                politique => politique.WithOrigins("{yourdomain}").AllowAnyHeader().AllowAnyMethod().AllowCredentials());
        });

eapp.UseCors("AllowSpecificOrigin");