HttpClient ile bir url'ye nasıl istek yapabiliriz ? Hemen örneğe başlayalım :
Örneğin bir api'ye mvc projemizden nasıl istek atarız ?
1.) Öncelikle bir "Blank Solution" oluşturalım.
2.) Yarattığımız solution içine Mvc ve Api projesi yaratalım
aşağıdaki gibi :
3.) Mvc projesinin launchSettings.json dosyasına gelip portlarını aşağıdaki gibi değiştirelim :
"applicationUrl": "https://localhost:5003;http://localhost:5002",
launchSettings.json aşağıdaki gibi gözükmelidir:
Faklı port veriyoruz çünkü api projesinin ve mvc projesinin portları default olarak aynı gelir ama biz iki projeyi aynı anda ayağı kaldıracağımızdan çakışmayı önlemek istiyoruz.
4.) Mvc projemize Service adlı bir klasör ve klasörün içine WeatherForecastService.cs adlı bir class oluşturalım :
5.) Mvc projemize NewtonSoft.json adlı nuget package'i yükleyelim.
6.) Mvc projemizde Startup.cs altında ConfigureServices metodumuzu aşağıdaki gibi değiştirelim :
public void ConfigureServices(IServiceCollection services)
{
services.AddHttpClient();
services.AddScoped<WeatherForecastService>();
services.AddControllersWithViews();
}
7.) Oluşturmuş olduğumuz Service/WeatherForecastService.cs adlı dosyamızı aşağıdaki kodları yapıştıralım :
public class WeatherForecastService
{
private readonly HttpClient _httpClient;
public WeatherForecastService(HttpClient httpClient)
{
_httpClient = httpClient;
}
public async Task<string> GetWeatherForecast()
{
var response = await _httpClient.GetAsync(@"https://localhost:5001/WeatherForecast");
if (response.IsSuccessStatusCode)
{
return await response.Content.ReadAsStringAsync();
}
else
{
return "Yanlış bir şeyler oldu.";
}
}
}
8.) Mvc prjemizdeki HomeController'ı aşağıdaki gibi değiştirelim :
public class HomeController : Controller
{
private readonly ILogger<HomeController> _logger;
private readonly WeatherForecastService _weatherForecastService;
public HomeController(...,ILogger<HomeController> logger, WeatherForecastService weatherForecastService)
{
_logger = logger;
_weatherForecastService = weatherForecastService;
}
public async Task<IActionResult> Index()
{
ViewBag.Bag = await _weatherForecastService.GetWeatherForecast();
return View();
}
.
.
.
Burada yaptığımız şey WeatherForecastService'i di olarak geçiyoruz ve GetWeatherForecast diyerek ViewBag'e değerimizi atıyoruz ki view de görelim.
Not: Üç noktalar farklı olabiecek servis veya View'lar olabileceğini temsil etmek için kullanıldı. Kodu yapıştırdıktan sonra üç noktaları lütfen siliniz.
9.) View'de görebilmek için ViewBag.Bag'i de view'de yazmamız lazım :
View/Home/Index.cshtml'e gidelim :
ve aşağıdaki kodları Index.cshtml'e yapıştıralım :
@{
ViewData["Title"] = "Home Page";
}
@ViewBag.Bag
<div class="text-center">
<h1 class="display-4">Welcome</h1>
<p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
</div>
10.) Api projemizi "dotnet run" ile ayağı kaldıralım.
11.) Mvc projemizi "dotnet run" ile ayağı kaldıralım.
Sonuç :
Datalarımızı aldık.
Not : Eğer farklı istekler yapacaksak GetAsync yerine PostAsync, PutAsync, DeleteAsync gibi HttpClient metotlarımız da var.
Kullanımları görmek için aşağıdaki linke bakabilirsiniz :
Bir dahaki yazımda görüşmek dileğiyle.
En iyi dileklerim ile.
Mustafa Samed Yeyin.
Top comments (0)