2009-11-05 6 views
7

Bir web servisine erişmek için HTTPWebRequest kullanmaya çalışıyorum ve kimlik bilgilerini girerken sorun yaşıyorum, aşağıdaki kod bölümüne bakın. Alacakaranlık nesnesini (nc), hata ayıklayıcısında yerleşik olarak ve istekte de istekte görebiliyorum. Kimlik bilgileri, ancak kodun son satırına ulaştığımda, yetkili bir hata iletisi ile hata veriyor. Sunucu üyelerimiz sunucudaki isteği izlediler ve aktarılan kimlik bilgisi yok. Kimlik Bilgileri nesnesinde yanlış bir şey mi yapıyorum yoksa burada yapmam gereken bir şey var mı?Ağa Bağlan Kimlik Bilgileri HttpWebRequest ile C# arasında ASP.Net Page

Uri requestUri = null; 
Uri.TryCreate("https://mywebserver/webpage"), 
    UriKind.Absolute, out requestUri); 

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create 
    (requestUri); 

NetworkCredential nc = 
    new NetworkCredential("user", "password"); 

request.Credentials = nc; 

request.Method = WebRequestMethods.Http.Get; 
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
+3

Geçtiğiniz şeyi kendiniz görmek için Fiddler'ı kullandınız mı? Bu gibi şeyleri değerlendirmek için sunucu milletine güvenmekten hoşlanmıyorum :) – JustLoren

+0

JustLoren - Bu yorumu yayınlayana kadar Fiddler hakkında bir şey bilmiyordum, indirdim ve Auth sekmesi altında Proxy-Yetkilendirme Başlığı yok yazıyor. Yetkilendirme Başlığı yok, bu yüzden hala kodumda bir sorun olduğunu düşünüyorum. –

+0

Dahili web hizmetini çağırmak için bir proxy sınıfı oluşturmamanızın bir nedeni var mı? – kd7

cevap

1

Microsoft Premier Destek sonunda beni Kimlik ve "Temel" yetki eklemek için CredentialCache sınıfını kullanarak bu sorunu çözmeye yardımcı oldu:

NetworkCredentials ya son derece sezgisel olmayan veya lapa lapa
NetworkCredential nc = 
    new NetworkCredential(GetSetting("username"), GetSetting("password")); 
CredentialCache cache = new CredentialCache(); 

cache.Add(requestUri, "Basic", nc); 

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(requestUri); 
+0

ss l kullanmıyor, şifre açık metne aktarılacak mı? –

12

, ya da her ikisi de. Ne olursa olsun, tümüyle NetworkCredentials atlayarak sorunu çözebilir ve (ı, bulunan mark.michaelis.net nezaketi olan) bu yöntemi kullanmak

/* http://mark.michaelis.net/Blog/CallingWebServicesUsingBasicAuthentication.aspx */ 
byte[] credentialBuffer = new UTF8Encoding().GetBytes(username + ":" +password); 
req.Headers["Authorization"] ="Basic " + Convert.ToBase64String(credentialBuffer); 

Peki manuel için bir başlık yaratıyor yapıyoruz sizin HttpWebRequest ve İçeriği Temel Kimlik Doğrulama başlığında görüneceği şekilde eklemek. ÇALIŞIYOR bir cazibe gibi.

+1

Mükemmel, bu işe yaradı, kabul edilen cevap benim için işe yaramadı. –