Estou tentando renderizar application/ld+json no componente .NET MAUI, mas ele está renderizando vazio.
<script type="application/ld+json">
@{
getBannerSeoText();
}
</script>
@code {
private string getBannerSeoText()
{
string carouselText = "";
using (HttpClient client = new HttpClient())
{
var hostUrl = $"{httpContextAccessor.HttpContext.Request.Scheme}://{httpContextAccessor.HttpContext.Request.Host}";
string fileUrl = $"{hostUrl}/{utilityService.GetSeoFolderUrl()}/carousal.json";
carouselText = Task.Run(async () => await client.GetStringAsync(fileUrl)).Result;
}
return carouselText;
}
}
você vê que seu carouselText está vazio porque ele é atualizado quando a Task que você executa para o client.GetString é finalizada. Mas neste ponto o getBannerSeoText já terminou e retornou o valor vazio há muito tempo, e seu componente já foi atualizado, com o valor ainda não definido.
Você não deve iniciar uma tarefa como essa para chamar o método httpClient e nunca chamar o método async diretamente do código do Razor.
O que você pode fazer é armazenar o texto em um membro privado do seu componente e baixá-lo no processo de inicialização.
E você ainda pode adicionar um botão para atualizar, ou cronômetro ou o que for
Além disso, como você está em um ambiente Blazor, você tem a injeção de dependência e deve deixar o .NET gerenciar seus httpClients:
em seu program.cs :
e no seu componente: