I have a Maui net application for the mobile part and Vuejs for the web part, all of this is linked to an API in C#, and the database (SSMS) and the API are on Azure. The problem is that when I retrieve the data to display it it takes time (around 2-3 minutes). I don't know how to make it faster.
Vue.js
async fetchActivities() {
try {
const response = await fetch('/api/v1/Activities/all');
if (!response.ok) {
throw new Error(`Network response was not ok, status: ${response.status}`);
}
C#
httpclient.BaseAddress = new Uri(AppSettings.UrlApi);
httpclient.Timeout = TimeSpan.FromMinutes(2);
string oauthToken = await SecureStorage.Default.GetAsync(AppSettings.AuthToken);
httpclient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", oauthToken);
int loginUserId = Convert.ToInt32(await SecureStorage.Default.GetAsync(AppSettings.UserId));
var requestUri = "api/v1/Activities/all";
var response = await httpclient.GetAsync(requestUri);
var content = await response.Content.ReadAsStringAsync();
Api
//[Authorize]
[ApiController]
[Route("api/v1/[controller]")]
public class ActivitiesController : ControllerBase
{
private readonly IActivitiesRepository _activitiesRepository;
private readonly IMessagesRepository _messagesRepository;
private readonly IUsersRepository _usersRepository;
private readonly IMapper _mapper;
private readonly IImagesRepository _imagesRepository;
public ActivitiesController(IActivitiesRepository activitiesRepository, IMapper mapper, IUsersRepository usersRepository, IMessagesRepository messagesRepository, IImagesRepository imagesRepository)
{
_activitiesRepository = activitiesRepository;
_usersRepository = usersRepository;
_mapper = mapper;
_messagesRepository = messagesRepository;
_imagesRepository = imagesRepository;
}
[HttpGet("{id}")]
public async Task<ActionResult<ActivitiesEntity>> GetActivitiesbyIdAsync(int id)
{
ActivitiesEntity activitiesEntity = await _activitiesRepository.FindByIdAsync(id);
return Ok(activitiesEntity);
}
[HttpGet]
[Route("all")]
public async Task<ActionResult<IEnumerable<ActivitiesEntity>>> GetActivities()
{
IEnumerable<ActivitiesEntity>? activities = await _activitiesRepository.FindAllIncludingAsync(x => x.Images);
var response = _mapper.Map<IEnumerable<ActivitiesModel>>(activities);
return Ok(response);
}
public virtual async Task<IEnumerable<TEntity>> FindAllIncludingAsync(params Expression<Func<TEntity, object>>[] includeProperties)
{
IQueryable<TEntity> query = _entities.AsNoTracking();
foreach (var includeProperty in includeProperties)
{
query = query.Include(includeProperty);
}
return await query.ToListAsync();
}