Je passe mon temps à trouver comment implémenter correctement ma redirection 404.ASP.NET MVC - Utilisation de la réflexion pour trouver si un contrôleur existe
Si j'utilise les éléments suivants
<HandleError()> _
Public Class BaseController : Inherits System.Web.Mvc.Controller
''# do stuff
End Class
Ensuite, toute erreur non gérée sur la page va charger la vue « erreur » qui fonctionne très bien. http://example.com/user/999 (où 999 est un ID utilisateur invalide) va lancer une erreur tout en conservant l'URL d'origine (c'est ce que je veux)
Cependant. Si quelqu'un entre http://example.com/asdfjkl dans l'URL (où asdfjkl est un contrôleur invalide), alors IIS lance la page générique 404. (c'est pas ce que je veux). Ce dont j'ai besoin, c'est que la même chose s'applique ci-dessus. L'URL d'origine reste et le contrôleur "NotFound" est chargé.
Je me inscris mes itinéraires comme celui-ci
Shared Sub RegisterRoutes(ByVal routes As RouteCollection)
routes.RouteExistingFiles = False
routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
routes.IgnoreRoute("Assets/{*pathInfo}")
routes.IgnoreRoute("{*robotstxt}", New With {.robotstxt = "(.*/)?robots.txt(/.*)?"})
routes.AddCombresRoute("Combres")
routes.MapRoute("Start", "", New With {.controller = "Events", .action = "Index"})
''# MapRoute allows for a dynamic UserDetails ID
routes.MapRouteLowercase("UserProfile", "Users/{id}/{slug}", _
New With {.controller = "Users", .action = "Details", .slug = UrlParameter.Optional}, _
New With {.id = "\d+"} _
)
''# Default Catch All MapRoute
routes.MapRouteLowercase("Default", "{controller}/{action}/{id}/{slug}", _
New With {.controller = "Events", .action = "Index", .id = UrlParameter.Optional, .slug = UrlParameter.Optional}, _
New With {.controller = New ControllerExistsConstraint})
''# Catch everything else cuz they're 404 errors
routes.MapRoute("CatchAll", "{*catchall}", _
New With {.Controller = "Error", .Action = "NotFound"})
End Sub
Notez que le ControllerExistsConstraint
? Ce que j'ai besoin de faire est d'utiliser Reflection pour découvrir si oui ou non le contrôleur existe.
Quelqu'un peut-il m'aider à remplir les espaces? Je voudrais également connaître les implications de performance de ceci ... quelle est la performance de la réflexion? Si c'est trop, y a-t-il un meilleur moyen?
parce que dans ma question j'ai dit "L'URL d'origine reste, et le contrôleur" NotFound "est chargé.". ** Je ne veux PAS rediriger vers une page non trouvée ** –