2017-03-14 45 views
5

我發現這個網站: https://docs.microsoft.com/en-us/aspnet/core/security/cors如何使全球在asp.net網頁API核心CORS

但是我如何在全球範圍內啓用它困惑,因爲它似乎有2種方式來做到這一點,請告訴我這兩種方式有何區別?或者他們做了2件不同的事情?

public IConfigurationRoot Configuration { get; } 

     // This method gets called by the runtime. Use this method to add services to the container. 
     public void ConfigureServices(IServiceCollection services) 
     { 
      //https://docs.microsoft.com/en-us/aspnet/core/security/cors 
      services.AddCors(options => 
      { 
       options.AddPolicy("AllowSpecificOrigin", 
        builder => builder.WithOrigins("http://example.com") 
             .AllowAnyHeader() 
        ); 
      }); 

      services.Configure<MvcOptions>(options => 
      { 
       options.Filters.Add(new CorsAuthorizationFilterFactory("AllowSpecificOrigin")); 
      }); 

      // Add framework services. 
      services.AddMvc(); 
     } 

     // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. 
     public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
     { 
      loggerFactory.AddConsole(Configuration.GetSection("Logging")); 
      loggerFactory.AddDebug(); 

      app.UseCors("AllowSpecificOrigin"); 

      app.UseMvc(); 
     } 
+0

爲了清晰起見,Luis可以將你的代碼塊分成兩種方式嗎? – ahsteele

+0

爲什麼你標記唯一的答案是正確的,然後給它一個賞金**尋找來自可信和/或官方消息來源的答案。**? –

+0

這是一個錯誤,但我沒有看到如何解決它。我怎樣才能刪除賞金? –

回答

4

ConfigureServices中的調用只是添加Cors服務,沒有設置它(包括創建hte策略)。通過添加過濾器使其成爲全局過濾器,但我明白UseCors(在配置中)是全局添加它的首選方式。 Filter代碼所做的就是強制所有控制器上的屬性,並且UseCors有效地執行相同的操作,只是在堆棧的不同部分。我相信UseCors會爲MVC調用做更多的事情,這就是爲什麼它不同。