Actualmente tengo
app.UseExceptionHandler("/Home/Error");Quiero hacer la ruta relativa a la ruta original.
Por ejemplo si
Tenant1 / PageThatThrowsError luego app.UseExceptionHandler ("Tenant1 / Home / Error");
pero si
Tenant2 / PageThatThrowsError luego app.UseExceptionHandler ("Tenant2 / Home / Error");
Pensé que podría hacer
app.UseExceptionHandler(
    new ExceptionHandlerOptions
    {
        ExceptionHandler = async (ctx) =>
        {
            //logic that extracts tenant
            ctx.Request.Path = new PathString(Invariant($"{tenant}/Home/Error"));
        }
    }
);
pero esto arroja un 500
EDITAR: todas las soluciones actuales que, por ejemplo, utilizan redireccionamientos pierden el contexto de error actual y no permiten que el controlador llame, por ejemplo, a HttpContext.Features.Get ().

Respuestas:
Suponemos que la aplicación ha requerido rutas y puntos finales de
/Tenant1/Home/Errory/Tenant2/Home/Error. Puede resolver el problema usando este código:Otra solución equivalente es poner el siguiente código en
startup.cs:Suponemos que
tenantproviene de algún lugar, como las aplicaciones. Luego, puede obtener fácilmente excepciones en su punto final deseado escribiendo una ruta simple en su acción:o puedes crear dos acciones diferentes:
Actualizar:
Si sus inquilinos se agregan dinámicamente y no se pueden poner en su
appsettings.json(lo que supusimos en las soluciones anteriores), puede escribir un middleware para manejar las Excepciones, así es como:Agregue el middleware en su método
Startup.csinConfigure:En la siguiente línea, agregue una ruta para errores (exactamente después del middleware):
Cree una clase para su middleware y ponga este código en:
Tenga en cuenta que se puede añadir todo lo que desea el contexto de esta manera:
context.Request.HttpContext.Features.Set<Exception>(ex);.Y finalmente, debe crear una acción con una ruta adecuada para escribir su lógica allí:
Tenga en cuenta que el objeto que se estableció en el middleware, ahora se puede recuperar.
fuente
app.UseExceptionHandler($"/{tenant}/Home/Error");no es estática! Puedes poner lo que quieras en lugar de{tenant}, y con la rutaRoute("/{TenantId}/Home/Error")]puedes escucharlos a todos.