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 a http://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 utilizando AddControllersWithViews(), que agrega controladores MVC y vistas a tu aplicación, pero también estás usando AddMvc() con EnableEndpointRouting = 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 en http://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 es CustomerWebhookController, 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étodo ConfigureServices del archivo Startup.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 en Configure agrega enrutamiento para los controladores MVC. Para habilitar el enrutamiento para los controladores API Web, debes agregar app.UseRouting(); y app.UseEndpoints(endpoints => {endpoints.MapControllers();}); antes de app.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