Pregunta

En mi ruta me gustaría tener algo como controlador de ruta no encontrado.

Por ejemplo, he creado una asignación como

routes.MapRoute(
                     "default",
                     "{controller}/{action}/{id}",
                     new { controller = "Home", action = "Index", id="" }
             );

routes.MapRoute(
                     "Catchall",
                     "{*catchall}",
                     new { controller = "Home", action = "Lost" }
             );

pero cuando el usuario inserta direcciones como / uno / dos / tres / cuatro / bla / bla, se almacenará en caché con la asignación de Catchall.

Pero cuando el usuario inserta algo que debería coincidir con la asignación predeterminada, (como / one / two /, pero este controlador o acción no está implementado) Me gustaría que la asignación de Catchall acepte esta solicitud, porque todas las otras asignaciones fallaron. Pero en lugar de esto me sale un error.

¿Debo anular algunos manejadores de mapeo para detectar la excepción si el controlador o la acción obtienen una excepción?

¿Fue útil?

Solución

El problema aquí es que no es responsabilidad de la ruta asegurarse de que "uno / dos" se asigna a un archivo . Esa responsabilidad recae en ViewEngine. Desde " uno / dos " es una ruta válida, se elegirá.

Si desea manejar el error de una ruta no válida, lo que le recomendaría que haga es simplemente usar la página integrada ErrorHandling " para mostrar cualquier mensaje que hubieras hecho en Catchall.

Otros consejos

No creo que esta sea la mejor solución, pero siempre podría ser más específico en sus rutas:

routes.MapRoute(
    "home and action",
    "home/index/{id}",
    new { controller = "Home", action = "Index", id="" }
);

... repite para el resto de tus acciones ...

routes.MapRoute(
    "article catch all",
    "home/{article}",
    new { controller = "Home", action = "ArticleSearcher", article="" }
);

Esto intentaría hacer coincidir una acción directa, y si no se encuentra ninguna acción, pase lo que normalmente sería la parte {action} de la ruta predeterminada a la acción 'ArticleSearcher' como un parámetro de cadena de artículo.

La desventaja es tener que crear explícitamente cada ruta de controlador / acción.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top