2015-08-20 15 views
7

Web api entegrasyon testi yapıyorum.Varsayılan İstek Başlığı herhangi bir değeri kabul etmez, her zaman boş

Bir Http Request başlığına benim hamiline belirteci geçirmek istediğiniz

:

httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "eJ43k5l435j34l5j43l5j34l5jl35j34l5j344l.4534535.534534sample..."); 

kod satırı ben httpClient.DefaultRequestHeaders.Authorization mülkiyet içine bakmak ve onu NULL'dur yapılır?

Neden bu?

GÜNCELLEME Bu benim entegrasyon testi sınıfın taban sınıfından olan

:

protected HttpClient Client { get { return server.HttpClient; } } 

zaman deney sınıfında ben el ile yeni bir http istemcisi:

var client = new HttpClient(); 
client.DefaultRequestHeaders.Add("key","value"); 

Çalışıyor, ama Müşterim ile değil!

GÜNCELLEME 2

Tamam ben bu öğrendim:

var c = Client; 
c.DefaultRequestHeaders.Add("bla", "bla"); 

ÇALIŞIR, ama neden yeni bir değişkende müvekkilimi okumak gerekiyor?

+0

Sanırım bu sorunu çözmek için biraz daha fazla koda ihtiyacım var. İlk satırınızdaki httpClient nerede? Gördüğüm gibi, bu bir HttpClient nesnesidir, korumalı bir HttpClient İstemcisinden {get {return server.HttpClient; }} '?? Ifso, hepsi 'server' ile bitti. Bu kodu bir API'da mı yoksa bir API'YI KULLANARAK bir uygulamada mı kullanıyorsunuz? – CularBytes

+0

Sunucu değişkeninizin türü hakkında biraz bilgi ekler misiniz? Oluşturduğunuz bir sınıf veya çerçeve türü ise. Kendi sınıfınız olması durumunda, HttpClient'in nasıl örneklendirildiği hakkında daha fazla bilgi verebilir misiniz? –

+0

Buna bir çözüm buldunuz mu? Ben tam olarak aynı sorun var, bir WebAPI2 kod temeli üzerinde entegrasyon testlerini çalıştırmaya çalışıyorum, ve üstbilgiyi (sizin yaptığınız gibi) atayım ve hemen sonraki satırda her zaman ALWAYS ... bu beni çıldırtıyor.HttpClient üstbilgisini ayarlamak yerine, programlayıcının üstbilgiyi HttpMessageRequest yerine başlığına getirdiği ve HttpClient.PostAsJson yerine HttpClient.SendAsync kullanarak gönderdiği (tek örnek) bir örnek buldum. zaman ve hala neden üstbilgi HttpClient üzerinde ayarlanamaz bilmiyorum? –

cevap

0

HttpClient'teki Auth başlıklarının (özellikle, kimliği doğrulanmış hizmetlerin işlenemediği ve bu nedenle bana yararsız gibi görünmeyen gizli TestServer ana bilgisayarında) okuduğumu (makalede bulamadığım için üzgünüm) okudum https://blog.kloud.com.au/2014/10/26/asp-net-web-api-integration-testing-with-one-line-of-code/'a bakın "Maalesef, bellek içi çözüm benim için kutudan çıkmıyor. Kimlik doğrulama işlemlerini gerçekleştiremiyor gibi görünüyor. UseJwtBearerAuthentication (JWT taşıyıcı belirteç ara katman yazılımı) ve api çağrılarım 401") webapi'de kullanıyorum sadece GET - aynı sorun vardı, kimlik doğrulanmış uç noktalara karşı entegrasyon testleri yapmaya çalışıyorum - taşıyıcı kodumu aldım, üstbilgiye ekledim, ancak kodun sonraki satırında, NULL oldu.

buldum tavsiye (ve ben çalışma var çözelti) herhangi bir nedenle, hangi görünüşte (ziyade HttpClient.PostAsync daha HttpClient.SendAsync kullanmak sonra HttpRequestMessage başlıklarını DEĞİL HttpClient başlıklarına Taşıyıcı başlığını ekleyin ve etmekti , Gövde içeriğini değil, başlıklarını gönderir).

Zaten bunu anlamaya çalışırken çok fazla zaman harcadım ve bulduğunuz öğreticilerin çoğu auth başlıklarını ele almıyor, bu yüzden daha fazla insanın bu sorunu tartışmamasına şaşırıyorum (tabiki m sadece bir muppet değildir. Ancak, evet, kimlik doğrulayıcılarınızı, http istemcisini değil, istek mesajına eklemeyi deneyin.

İlgili konular