2009-05-31 8 views
2

J'ai un bon fonctionnement de StructureMap sur ma machine. Tout fonctionne bien ... jusqu'à ce que je demande une ressource qui n'existe pas. Au lieu d'un 404, j'obtiens une erreur de 500.J'ai des problèmes avec ASP.NET MVC et StructureMap

par ex. http://localhost:6969/lkfhklsfhskdfksdf

En vérifiant le net, on m'a dit de fix my structuremap controller class. Est-ce que cela et la joie! je reçois maintenant le - original par défaut 404 page d'écran jaune -. Ok, c'est mieux que ma page d'erreur 500.

MAIS, je veux qu'il aille à ma page d'erreur 404 :(Si j'appelle une mauvaise action sur un contrôleur réglo, je reçois ma page d'erreur 404.

Dans mon global.asax j'ai mes itinéraires personnalisés , la valeur par défaut, puis enfin la 404 route:

routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}/{id}", // URL with parameters 
    new { controller = "Post", action = "Index", id = "" } // Parameter defaults 
    ); 

// Invalid/Unknown route. 
routes.MapRoute(
    "404-ResourceNotFound", 
    "{*url}", 
    new { controller = "StaticContent", action = "ResourceNotFound" } 
    ); 

Voici mon StructureMap code du contrôleur:

public class StructureMapControllerFactory: DefaultControllerFactory { 
    protected override IController GetControllerInstance(Type controllerType) { 
     if (controllerType != null) { 
      return ObjectFactory.GetInstance(controllerType) as Controller; 
     return base.GetControllerInstance(controllerType); 
    } 
} 

Toutes les idées est-il un moyen que je pourrais obtenir en quelque sorte le contrôleur de carte la structure fa? ctory pour revenir dans la liste des routes global.asax? ou ai-je fait quelque chose de vraiment mauvais et besoin de réparer d'autres choses.

bravo!

Répondre

2

mmm ... semble être une exception. comme la façon dont MVC est conçu pour gérer les erreurs 404 via des exceptions.

voici mon code:

public class StructureMapControllerFactory : DefaultControllerFactory 
{ 
    protected override IController GetControllerInstance(Type controllerType) 
    { 
     IController result = null; 
     try 
     { 
      result = ObjectFactory.GetInstance(controllerType) as Controller; 
     } 
     catch (StructureMapException) 
     { 
      System.Diagnostics.Debug.WriteLine(ObjectFactory.WhatDoIHave()); 
      throw; 
     } 

     return result; 
    } 
} 

.. vous avez peut-être même eu cela et changé. Sinon, essayez-le et voyez s'il y a une différence. Je ne soupçonne pas qu'il y aura. Peut-être essayons-nous simplement d'entrer dans cette priorité et de voir quelles exceptions sont levées.

(Note:.? Son bizarre comment je continue à trébucher sur vos questions Krome Qu'est-ce que r u travail sur)

EDIT: J'ai essayé la demande de tenue et a obtenu la même exception. J'ai donc mis à jour ma classe comme vous l'avez fait.

Ma nouvelle classe:

public class StructureMapControllerFactory : DefaultControllerFactory 
{ 
    protected override IController GetControllerInstance(Type controllerType) 
    { 
     if (controllerType == null) 
      return base.GetControllerInstance(controllerType); 

     IController result = null; 
     try 
     { 
      result = ObjectFactory.GetInstance(controllerType) as Controller; 
     } 
     catch (StructureMapException) 
     { 
      System.Diagnostics.Debug.WriteLine(ObjectFactory.WhatDoIHave()); 
      throw; 
     } 

     return result; 
    } 
} 

..ce me semble redonner la 404 comme il se doit .. mais je jamais les pages d'erreur personnalisées dans le développement (localement) .. je dois attendre je publie avant que je reçois ceux-ci. Êtes-vous habitué à voir les pages d'erreurs personnalisées en dev?

+1

Je travaille actuellement autour de 5 sites en ce moment :(Re-arching un, 4 sont nouveaux. :(Aussi, avec votre code, j'avais l'habitude de l'avoir aussi.Que se passe-t-il quand vous allez une adresse URL: http : // localhost: 12345/sfsfkasfhasklfla (par exemple votre hôte local et votre port, puis un uri qui ne correspond à aucun contrôleur.) Votre structureMapControllerFactory lance-t-elle une exception? –

+0

Mon application tombe sur la page d'erreur personnalisée par défaut en production .. mais pas parce que j'ai une 'route 404.' Je pense que c'est sa conception interne MVC Pourquoi avez-vous cette route 404? –

+0

Donc, je peux envoyer des piaulements à ma propre page 404 personnalisée –

Questions connexes