API de alojamiento de errores en aplicaciones web del servidor Blazor
Tenemos una aplicación web .NET 5.0 Blazor existente. He añadido un ASP. NET Core Web API al mismo proyecto porque quiero proporcionar una interfaz REST a consumidores externos. Cuando lo solicite http://localhost:5000/stripe/customerwebhook
, tengo un 404 not found
error. ¿Qué podría estar perdiendo?
Mi clienteWebhookController La clase API parece lo siguiente:
[Route("stripe/[controller]")]
[ApiController]
public class CustomerWebhookController : ControllerBase
{
[HttpPost]
public async Task Index()
{
return Ok();
}
}
Startup.cs:
using Microsoft.AspNetCore.Mvc;
public partial class Startup
{
public void ConfigureServices(IServiceCollection services)
{
OnConfiguringServices(services);
services.AddHttpContextAccessor();
services.AddScoped(serviceProvider =>
{
var uriHelper = serviceProvider.GetRequiredService();
return new HttpClient
{
BaseAddress = new Uri(uriHelper.BaseUri)
};
});
services.AddHttpClient();
services.AddAuthentication();
services.AddAuthorization();
services.AddControllersWithViews();
services.AddMvc(options => options.EnableEndpointRouting = false)
.SetCompatibilityVersion(CompatibilityVersion.Version_3_0);
services.AddRazorPages();
services.AddServerSideBlazor().AddHubOptions(o =>
{
o.MaximumReceiveMessageSize = 10 * 1024 * 1024;
});
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ApplicationIdentityDbContext identityDbContext)
{
OnConfiguring(app, env);
if (env.IsDevelopment())
{
Microsoft.IdentityModel.Logging.IdentityModelEventSource.ShowPII = true;
app.UseDeveloperExceptionPage();
}
else
{
app.Use((ctx, next) =>
{
return next();
});
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseMvcWithDefaultRoute();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapControllers();
endpoints.MapBlazorHub();
endpoints.MapFallbackToPage("/_Host");
});
}
}
Pregunta hecha hace 3 años, 4 meses, 27 días - Por Kairo
2 Respuestas:
-
El problema que estás experimentando con el error
404 not found
al intentar acceder ahttp://localhost:5000/stripe/customerwebhook
puede estar relacionado con la configuración de enrutamiento en tu aplicación Blazor.En el archivo
Startup.cs
, estás utilizandoAddControllersWithViews()
, que agrega controladores MVC y vistas a tu aplicación, pero también estás usandoAddMvc()
conEnableEndpointRouting = false
, lo cual deshabilita el enrutamiento basado en endpoints.Para que tu API Web en
CustomerWebhookController
funcione correctamente, te recomendaría realizar los siguientes ajustes:- Eliminar la línea `services.AddMvc(options => options.EnableEndpointRouting = false)` ya que estás agregando controladores y vistas con `AddControllersWithViews()`.
- Asegurarte de que el enrutamiento para los controladores esté correctamente configurado en `Configure` método de tu `Startup.cs`. Puedes simplificar tu método `Configure` de la siguiente manera:
csharp public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthentication(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); // Agregar enrutamiento para controladores endpoints.MapBlazorHub(); endpoints.MapFallbackToPage("/_Host"); }); }
Al realizar estos ajustes, deberías poder acceder correctamente a tu API Web en
CustomerWebhookController
enhttp://localhost:5000/stripe/customerwebhook
.Si continúas experimentando problemas, asegúrate de que la dirección y el puerto son correctos al hacer la solicitud y que la aplicación se está ejecutando sin errores.
Respondida el Dec 20, 2020 a las 00:40 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
Hay varias cosas que podrían causar un error 404 al intentar acceder al punto final de la API
/stripe/customerwebhook
en tu aplicación Blazor. Aquí tienes algunas comprobaciones que puedes realizar:1. Verificación de la ruta:
Asegúrate de que la ruta del controlador API esté configurada correctamente como
/stripe/[controller]
. En el ejemplo proporcionado, el nombre del controlador esCustomerWebhookController
, por lo que la ruta completa debería ser/stripe/customerwebhook
.2. Registro de servicios:
Verifica que la clase
CustomerWebhookController
esté registrada como un servicio en el métodoConfigureServices
del archivoStartup.cs
. Parece que has registrado los servicios necesarios para la aplicación Blazor, pero asegúrate de que también hayas registrado los servicios para la API Web.3. Enrutamiento:
El método
UseMvcWithDefaultRoute
enConfigure
agrega enrutamiento para los controladores MVC. Para habilitar el enrutamiento para los controladores API Web, debes agregarapp.UseRouting();
yapp.UseEndpoints(endpoints => {endpoints.MapControllers();});
antes deapp.UseMvcWithDefaultRoute();
.4. Autorización:
Si has aplicado autorización al controlador API, asegúrate de que el usuario que realiza la solicitud tenga los permisos necesarios para acceder al punto final.
5. Depuración:
Agrega declaraciones de registro a tu controlador API para verificar si se está llamando al método
Index
. Puedes utilizar herramientas como Fiddler o Postman para inspeccionar las solicitudes y respuestas de la API.Archivo Startup.cs actualizado con el enrutamiento de la API Web:*
... app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); endpoints.MapBlazorHub(); endpoints.MapFallbackToPage("/_Host"); }); ...
Si has revisado todos estos puntos pero sigues obteniendo un error 404, proporciona más detalles sobre la configuración de tu proyecto y los pasos que estás siguiendo para acceder al punto final de la API.
Respondida el Dec 20, 2020 a las 00:43 - por Gemini
Votos positivos: 0 | Votos negativos: 0