When I run my foody project and click on the categories on my web page, there is only json data on the displayed page. I want the recipe data to be in the cards. When I open the console, I get an error like this
Failed to load resource: the server responded with a status of 404 (Not Found)
:5229/api/dishes/GetDishesByCategory:1
DishByCategory.cshtml
@{
ViewData["Title"] = "DishesByCategory";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<!DOCTYPE html>
<html lang="tr">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>@ViewData["Title"]</title>
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" />
<link rel="stylesheet" href="~/css/site.css" asp-append-version="true" />
</head>
<body>
<div class="container mt-5 pt-5">
<h2>@ViewData["Title"]</h2>
<div class="row" id="dishesContainer">
<!-- Yemekler burada JavaScript ile yüklenecek -->
</div>
</div>
<script src="~/lib/jquery/dist/jquery.min.js"></script>
<script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
<script src="~/js/site.js" asp-append-version="true"></script>
<script>
document.addEventListener('DOMContentLoaded', function () {
var urlParams = new URLSearchParams(window.location.search);
var categoryId = urlParams.get('categoryId');
console.log("CategoryID:", categoryId);
if (categoryId) {
fetch(http://localhost:5229/api/Dishes/GetDishesByCategory?categoryId={}`)
.then(response => response.json())
.then(data => {
var dishesContainer = document.getElementById('dishesContainer');
dishesContainer.innerHTML = ''; // Önceki içerikleri temizle
data.forEach(dish => {
var dishElement = document.createElement('div');
dishElement.classList.add('col-md-3', 'mb-4');
dishElement.innerHTML = `
<div class="card">
<img src="${dish.dishImages[0]}" class="card-img-top" alt="${dish.dishName}" />
<div class="card-body">
<h5 class="card-title">${dish.dishName}</h5>
<p class="card-text">${dish.description}</p>
<a href="/dish/${dish.dishId}" class="btn btn-primary">Detayları Gör</a>
</div>
</div>
`;
dishesContainer.appendChild(dishElement);
});
})
.catch(error => console.error('Error:', error));
}
});
</script>
</body>
</html>
HomeController
using Foody.Helpers;
using Foody.Models;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using System.Diagnostics;
namespace Foody.Controllers
{
public class HomeController : Controller
{
private readonly ILogger<HomeController> _logger;
// HomeController sınıfının yapıcısı, ILogger<HomeController> türünde bir günlükleme nesnesi alır
public HomeController(ILogger<HomeController> logger)
{
_logger = logger;
}
// Ana sayfanın yüklenmesi için kullanılan eylem yöntemi
public IActionResult Index()
{
try
{
// API'ye GET isteği gönderir ve tüm kategorileri alır
var response = ServiceManager.MakeRequest(HttpRequestType.GET, "Category/GetAllCategories");
if (response != null && response.Result.HasValue && response.Result.Value)
{
// API yanıtından kategorileri deseralize eder
var categories = JsonConvert.DeserializeObject<List<CategoryModel>>(response.Data.ToString());
// Kategorileri View'e gönderir
return View(categories);
}
else
{
// API isteği başarısız olduğunda hata mesajını günlüğe kaydeder ve kullanıcıya gösterir
_logger.LogError($"API request failed with error: {response?.ErrorMessage}");
return Ok(response?.ErrorMessage ?? "Bilinmeyen bir hata oluştu.");
}
}
catch (Exception ex)
{
// Bir hata oluşursa hata mesajını günlüğe kaydeder ve kullanıcıya gösterir
_logger.LogError($"Bir hata oluştu: {ex.Message}");
return Ok("İsteğinizi işleme alırken bir hata oluştu.");
}
}
// Gizlilik politikası sayfasının yüklenmesi için kullanılan eylem yöntemi
public IActionResult Privacy()
{
return View();
}
// Hata sayfasının yüklenmesi için kullanılan eylem yöntemi
[HttpPost("Home/Show")]
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error()
{
// Hata sayfasını oluşturur ve hata ile ilgili bilgileri View'e gönderir
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}
}
}
CategoryController
using Foody.Helpers;
using Foody.Models;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using System.Collections.Generic;
namespace Foody.Controllers
{
public class CategoryController : Controller
{
// Ana sayfayı döndürür
public IActionResult Index()
{
return View();
}
// Belirli bir kategoriye ait yemekleri getirir
[HttpGet]
public IActionResult DishesByCategory(int categoryId)
{
try
{
// Verilen kategori için yemekleri al
var dishesResponse = ServiceManager.MakeRequest(HttpRequestType.GET, $"Dishes/GetDishesByCategory/{categoryId}");
if (dishesResponse != null && dishesResponse.Result.HasValue && dishesResponse.Result.Value)
{
// API yanıtından yemekleri deseralize eder
var dishes = JsonConvert.DeserializeObject<List<DishModel>>(dishesResponse.Data.ToString());
// Yemekleri JSON olarak döner
return Json(dishes);
}
else
{
// Yemekler alınamadığında hata mesajı döner
return Json(new { success = false, message = "Yemekleri almak başarısız oldu." });
}
}
catch (Exception ex)
{
// Bir hata oluştuğunda hata mesajı döner
return Json(new { success = false, message = "İsteğinizi işleme alırken bir hata oluştu." });
}
}
}
}
Displaying the page I am viewing in JSON format with cards
Sude Arıcı is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.