2016-04-04 26 views
0

Uygulamam için siteler arası komut dosyası oluşturmayla ilgili bir sorunum var. i almak bir POST yapmak çalıştığınızda istekleri iyi çalışır GET:CORS: ASP.NET 4.5.1 ile MVC istemi MVC

XMLHttpRequest cannot load http://localhost:49187/api/CampaignRegistration. The request was redirected to 'http://localhost:49187/Authentication/UnAuthorized?ReturnUrl=%2Fapi%2FCampaignRegistration', which is disallowed for cross-origin requests that require preflight. 

Benim uçuş öncesi isteği (kimlik doğrulama başlığındaki olmadan) 200 Tamam döndürür ama benim asıl isteği 302 Not Found döndürür (benim kimlik doğrulama başlığını içerir).

Access-Control-Request-Headers:accept, content-type 
Access-Control-Request-Method:POST 

ve yanıttır:

Benim uçuş öncesi isteği şöyle

Access-Control-Allow-Headers:content-type 
Access-Control-Allow-Origin:* 

Ve talebim yük başlıkları şunlardır: in

{Cache-Control: "no-cache", Authorization: "Basic XXXXX"} 

Ben sağladı CORS benim WebApiConfig.cs bunun gibi (orijini değiştireceğim: * gerçekten çalışırken). Web.config'de CORS ile ilgili her şeyi kaldırdım.

var cors = new EnableCorsAttribute("*", "*", "*"); 
config.EnableCors(cors); 

Benim WebAPI Kontrolörleri tüm

şöyle bir özel kimlik doğrulaması özelliği içeren BasicApiController uzatır:

Benim önyüzü backbone.js kullanılarak yapıldı ama gerçekten sorun olduğunu düşünmüyorum
protected override bool IsAuthorized(HttpActionContext actionContext) 
    { 
     try 
     { 
      if (HttpContext.Current.Request.Headers.AllKeys.Contains("Authorization")) 
      { 
       string authHeader = HttpContext.Current.Request.Headers["Authorization"]; 

       string cred = 
        Encoding.UTF8.GetString(Convert.FromBase64String(authHeader.Substring("Basic ".Length))); 
       string[] parts = cred.Split(':'); 
       string userName = parts[0]; 
       string password = parts[1]; 

       if (userName == _configRepository.WebApiUsername && password == _configRepository.WebApiPassword) 
       { 
        return true; 
       } 
      } 

      return false; 
     } 
     catch (Exception ex) 
     { 
      return false; 
     } 
    } 

ön tarafta. Web.config'i hiçbir faydaya dönüştürmeyi denedim, CORS'yi yaptığım gibi etkinleştirdikten sonra hiçbir şey yapmama gerekenden. Uygulamam OPTIONS (preflight istekleri dışında) kullanmıyor, ancak beklendiği gibi, ön kontrol isteği hiçbir şey yapmadığı için OPTIONS yöntemleri için kimlik doğrulamasını atlamayı denedim. Eğer herhangi bir fikri varsa, çok takdir edilecektir!

cevap

0

Sorun, istemci tarafı gibi görünüyor. Yetkilendirme parametresi, başlıklarda değil ..../facepalm'daydı.