2015-04-30 10 views
5

Web API çapraz menşe isteği paylaşımını etkinleştirmek için iki işlevsel farklı yolu var gibi görünüyor 2.etkinleştirilmesi CORS WebApiConfig ve Denetleyici niteliklerini vs

biri ile bir denetleyici süslemeleri System.Web.Http.Cors, ithal etmektir EnableCors nitelik ve WebApiConfig içinde config.EnableCors() yazmak için: değiştirmek için

[EnableCors(origins: "http://111.111.111.111", headers: "*", methods: "*")] 
public class GenericController : ApiController 
{ 
    // etc. 

diğer Web.config:

<system.webServer> 
    <httpProtocol> 
     <customHeaders> 
      <add name="Access-Control-Allow-Origin" value="http://111.111.111.111" /> 
      <add name="Access-Control-Allow-Methods" value="*" /> 
      <add name="Access-Control-Allow-Headers" value="*" /> 

bu iki farklı yaklaşımlar arasında işlevsel bir fark var mı? Hangisi doğru - bunlar aynı şeyi gerçekleştirmiyor mu? Her iki yöntem de CORS'i etkinleştirmek için kullanılıyorsa, şeyler patlayacak mı?

cevap

3

Başlıkları web.config dosyasına eklerseniz, bu uygulama tarafından sunulan her bir isteğinde bulunan belirtilen üstbilgileri içerir. Bu yöntem web sunucusu düzeyinde desteklenir ve yürütülmektedir config.EnableCors() bağlı değildir. İstediğiniz herhangi bir HTTP üstbilgisini eklemek için bu yöntemi kullanabilirsiniz. Kapak tarafında

, EnableCors nitelik WebAPI gerektirir ve bunu çalışması için bazı kod eklemeniz gerekir. Son kullanıcıya, sonuç aynıdır.

olarak hangi yolu için daha iyidir? Bu ayarları uygulama kodunda tutarak özniteliği kullanmayı tercih ettim, bu nedenle bu ayarlar gelecekteki geliştiricilere açıktır. İhtiyaçlarınıza bağlı olarak, ana ApiControler'larınızın tekrar tekrar aynı CORS başlıklarını teslim edebilecekleri bir soyut CorsApiController'a bakmak isteyebilirsiniz. Ancak CORS başlıklarının denetleyiciden denetleyiciye veya eylemden eyleme değişiklik göstermesi gerekiyorsa, bu yöntem çalışmaz.

+0

Anlamlıdır - 'System.Web.Http.Cors' ad alanı, çoklu denetleyicilerin farklı çapraz kaynak istek paylaşım kurallarına sahip olması gereken büyük projelerde ek esneklik sağlamak üzere. Çok teşekkür ederim! – alex