Eğer HttpClient'ımıza isim vermek ve merkezi bir şekilde BaseAddress gibi özelliklerini yönetmek istersek "Named HttpClient Factories" adlı yöntemi izleyebiliriz.
Atacağımız adımlar :
1.) Boş bir solution yaratın.
2.) Solution içerisine model-view-controller projesi yaratın.
Model-view-controller'ın launchSettings.json'daki applicationUrl'sini aşağıdaki gibi değiştirelim :
"applicationUrl": "https://localhost:5003;http://localhost:5002"
3.) Solution içerisine api projesi yaratın.
4.) Mvc projesinde Startup.cs'nin ConfigureService'ine aşağıdaki kodları ekleyelim :
services.AddHttpClient("namedHavaDurumu", c => { c.BaseAddress = new Uri("https://localhost:5001"); c.DefaultRequestHeaders.Add("Accept", "application/json"); });
Açıklama : HttpClient'ımıza "namedHavaDurumu" ismini verdik. Baseadress'ini "https://localhost:5001" yaptık ve header'ını json olarak kabul ettirdik.
5.) Mvc projesinin içirisine Service adlı bir klasör oluşturun ve içine NamedWeatherForecastService.cs adlı class'ı yaratın :
6.) NamedWeatherForecastService.cs adlı class'ımızı aşağıdaki gibi değiştirelim :
public class NamedWeatherForecastService { private readonly IHttpClientFactory _httpClient; public NamedWeatherForecastService(IHttpClientFactory httpClient) { _httpClient = httpClient; } public async Task<string> GetWeatherForecast() { var response = await _httpClient.CreateClient("namedHavaDurumu") .GetAsync("/WeatherForecast"); if (response.IsSuccessStatusCode) { return await response.Content.ReadAsStringAsync(); } else { return "Yanlış bir şeyler oldu."; } } }
Açıklama : Gördüğünüz üzere 4. adımdaki .AddHttpClient("namedHavaDurumu",...)'a verdiğimiz isim ile 6. adımda _httpClient.CreateClient("namedHavaDurumu") verdiğimiz isim aynı.
7.) Mvc projesinde Startup.cs'deki ConfigureService adlı metodumuza aşağıdaki servisleri ekleyelim :
services.AddScoped<NamedWeatherForecastService>();
Burası her gelen istekte "NamedWeatherForecastService" adlı class'ı gördüğünde bize yeni "NamedWeatherForecastService" verecek demektir.
Startup.cs içerisinde ConfigureServices metodumuz aşağıdaki gibi gözükmelidir :
public void ConfigureServices(IServiceCollection services) { services.AddHttpClient("namedHavaDurumu", c => { c.BaseAddress = new Uri("https://localhost:5001"); c.DefaultRequestHeaders.Add("Accept", "application/json"); }); services.AddScoped<NamedWeatherForecastService>(); services.AddControllersWithViews(); }
8.) Mvc projesinde HomeController.cs içerisinde aşağıdaki gibi değişiklikler yapalım :
a.) Class'ın içerisine aşağıdaki kodları yazalım :
private readonly NamedWeatherForecastService _weatherForecastService;
b.) Constructor'ın parametresine aşağıdaki parametreyi verelim :
NamedWeatherForecastService weatherForecastService
c.) Constructor'ın içine şu kodları yazalım :
_weatherForecastService = weatherForecastService;
d.) Index action'ının içine :
ViewBag.Bag = await _weatherForecastService.GetWeatherForecast();
yazalım.
Not : Total'de HomeController aşağıdakine benzer olmalıdır.
public class HomeController : Controller { private readonly ILogger<HomeController> _logger; private readonly NamedWeatherForecastService _weatherForecastService; public HomeController(ILogger<HomeController> logger, NamedWeatherForecastService weatherForecastService) { _logger = logger; _weatherForecastService = weatherForecastService; } public async Task<IActionResult> Index() { ViewBag.Bag = await _weatherForecastService.GetWeatherForecast(); return View(); } . . .
9.) View/Home içerisindeki Index.cshtml'e gidelim. Ve Aşağıdaki kodu Index.cshtml'e yapıştıralım :
@ViewBag.Bag
Total'de Index.cshtml aşağıdakine benzemelidir :
10.) Api uygulamızı "dotnet run" ile çalıştıralım.
11.) Mvc uygulamızı "dotnet run" ile çalıştıralım.
12.) Aşağıdaki url'yi browser'ımızıda açalım:
https://localhost:5003/
Sonuç :
Gördüğünüz üzere data'larımızı görebildik.
Bir dahaki yazımda "Typed HttpClient Factories"i anlatmaya çalışacağım.
Bir dahaki yazımda görüşmek dileğiyle.
En iyi dileklerim ile.
Mustafa Samed Yeyin.
Top comments (0)