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)