feat: error page
All checks were successful
Deploy QR Rapido / test (push) Successful in 3m32s
Deploy QR Rapido / build-and-push (push) Successful in 6m51s
Deploy QR Rapido / deploy-staging (push) Has been skipped
Deploy QR Rapido / deploy-production (push) Successful in 1m54s

This commit is contained in:
Ricardo Carneiro 2025-08-12 21:33:00 -03:00
parent e8fad24cc8
commit fc02c22f40
4 changed files with 81 additions and 7 deletions

View File

@ -151,10 +151,31 @@ namespace QRRapidoApp.Controllers
return View(); return View();
} }
//[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
//public IActionResult Error()
//{
// return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
//}
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error() public IActionResult Error()
{ {
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier }); var errorCode = Request.Query["code"].ToString();
var errorMessage = "";
// Interpretar códigos de erro específicos
if (errorCode.StartsWith("M.C506"))
{
errorMessage = "Erro de autenticação. Verifique suas credenciais e tente novamente.";
}
ViewBag.ErrorCode = errorCode;
ViewBag.ErrorMessage = errorMessage;
return View(new ErrorViewModel
{
RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier
});
} }
// Dynamic QR redirect endpoint // Dynamic QR redirect endpoint
@ -277,9 +298,9 @@ namespace QRRapidoApp.Controllers
} }
} }
public class ErrorViewModel //public class ErrorViewModel
{ //{
public string? RequestId { get; set; } // public string? RequestId { get; set; }
public bool ShowRequestId => !string.IsNullOrEmpty(RequestId); // public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
} //}
} }

11
Models/ErrorViewModel.cs Normal file
View File

@ -0,0 +1,11 @@
namespace QRRapidoApp.Models
{
public class ErrorViewModel
{
public string? RequestId { get; set; }
public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
public string? ErrorCode { get; set; }
public string? ErrorMessage { get; set; }
}
}

View File

@ -37,7 +37,6 @@
<Folder Include="wwwroot\css\" /> <Folder Include="wwwroot\css\" />
<Folder Include="Data\" /> <Folder Include="Data\" />
<Folder Include="Services\" /> <Folder Include="Services\" />
<Folder Include="Models\" />
<Folder Include="Middleware\" /> <Folder Include="Middleware\" />
<Folder Include="Tests\" /> <Folder Include="Tests\" />
</ItemGroup> </ItemGroup>

43
Views/Shared/Error.cshtml Normal file
View File

@ -0,0 +1,43 @@
@using QRRapidoApp.Models
@model ErrorViewModel
@{
ViewData["Title"] = "Erro";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<div class="container mt-5">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="alert alert-danger">
<h1 class="display-4">Erro</h1>
<p>Ocorreu um erro durante o processamento da sua solicitação.</p>
@if (Model?.ShowRequestId == true)
{
<p>
<strong>Request ID:</strong> <code>@Model.RequestId</code>
</p>
}
@if (!string.IsNullOrEmpty(ViewBag.ErrorCode))
{
<p>
<strong>Código do erro:</strong> <code>@ViewBag.ErrorCode</code>
</p>
}
@if (!string.IsNullOrEmpty(ViewBag.ErrorMessage))
{
<p>
<strong>Mensagem:</strong> @ViewBag.ErrorMessage
</p>
}
</div>
<div class="mt-3">
<a href="/pt-BR" class="btn btn-primary">Voltar ao Início</a>
<a href="/pt-BR/Account/Login" class="btn btn-secondary">Tentar Login Novamente</a>
</div>
</div>
</div>
</div>