Şu an HttpClient kodunu bir süredir kullanıyorum ve her zaman kullanmam için Uris
kullanımının bazı kırılganlıklara neden olduğunu hissettim. Servis uç nokta taban adreslerimizin çoğu app./web.config dosyasındadır. Sonuç olarak, kolayca değiştirilebilirler.Takip eden/bırakamayan Uri dizelerini kullanma
Bu uç nokta dizelerini Uri
oluşturmak için kullanırken, /
içinde bitmezlerse gerçekten çok kaba davranışlar elde ettiğimi buldum. Bir sivil /
nihayetti BaseAddress
ile GetAsync()
ararken, genellikle GET isteği gönderilir çıkan birleştirilmiş URL BaseAddress
final /
sonra dize ya düşer, ya da GetUri ilk /
-Önceki dize düşecek. Örneğin
:
BaseAddress
: http://test/serviceEndpoint
GetUri
: api/customer
HttpClient.GetAsync()
o GetUri
ile çağrılır
, bu http://test/api/customer
gelen GET çalışacaktır. /
ile BaseAddress
kapsayıcam, her şey beklendiği gibi çalışır.
Sorunum olduğunu BaseAddress
olmasıdır tahrik-config, diyerek .config dosyasındaki bir yorumda koyarak "Bir /
tüm Servis URL'leri emin ol!" gerçekten kırılgan bir çözümdür.
HttpClient
inşaatın tüm aşağıdaki kodu kullanma alışkanlığı içine kazanılmış ettik: Bu kırılgan olmasa da
var service = settings.GetValue("ServiceBaseUrl");
var serviceUri = !service.EndsWith("/")
? new Uri(service + "/")
: new Uri(service);
_client = new HttpClient
{
BaseAddress = serviceUri
};`
, her HttpClient
oluşturucu içinde olmasını tekrarlayan hisseder. Bu boilerplate kodundan kaçınmak için kullanabileceğim HttpClient
veya Uri
'da bir şey var mı?
Sen tekrarı miktarını azaltmak için bir uzantısı yöntemindeki mantığı sarmak için deneyebilirsiniz. Ve uygulamanızın içinden var serviceUri = service.GetBaseURL() kullanırsınız. https://msdn.microsoft.com/en-us/library/bb383977.aspx – Paul
Sadece bir durum düşüncesi: 'serviceUri = service.TrimEnd ('/') + "/" '' ServiceBaseUrl '' nin birden fazla '' 'ile bittiği ve'/'ile bitmediği durumları yakalar. – test