2010-06-01 6 views
1

Une autre question d'opinion:Vérification des valeurs NULL dans ASP.NET MVC Contrôleurs

Quel est le bon (à votre avis) pour vérifier dans un contrôleur nulls MVC. Par exemple, si vous avez un contrôleur d'édition qui extrait un enregistrement de la base de données en fonction d'un identifiant, que faites-vous si cet enregistrement n'est pas trouvé? J'ai trouvé this article, mais je ne suis pas sûr que j'aime cette méthode. Vérifiez-vous simplement avec une instruction if et rediriger vers une page 404? Quelle solution utilisez-vous?

Répondre

2

Je ne sais pas si c'est la meilleure pratique, mais je vérifie avec un si et redirige vers une vue "NotFound" qui déclare "La société/client/ce que vous avez demandé n'existe pas ou a été supprimé."

Est-ce ainsi simplement b/c j'ai suivi le NerdDinner tutorial lors de la configuration du squelette de mon site, et c'est ainsi qu'ils le font.

0

C'est ce que je fais dans mon blog:

public ActionResult DisplayPublication (int nr) 
{ 
    if (!PublicationExists (nr)) 
     throw new (HttpException (404, "")); 

    // .... 

    return ...; 
} 

En règle générale d'un pouce, si une ressource est demandée qui n'existait pas en réalité, le retour HTTP 404. Certainement pas retourner 200 OK avec le message à propos de la ressource manquante Si non trouvé, devrait être 404. Si vous avez changé la structure de vos URL, considérez 301 déplacé définitivement.

En fonction du type et de la logique du logiciel que vous développez, vous pouvez décider de réagir différemment à cette situation, c'est à vous de décider.

0

J'utilise une méthode similaire à l'article auquel vous avez lié: un filtre d'action qui renvoie un 404 si le modèle de vue est nul. Je l'ai combiné avec un invocateur d'action personnalisé (comme this) afin que je n'ai pas à mettre l'attribut de filtre sur tout.

Depuis que je l'ai mentionné, il existe plusieurs autres types d'actions que vous pouvez faire si vous allez sur la route du filtre d'action. J'ai/eu des filtres qui vont:

  1. Rediriger automatiquement vers la vue Index après une modification réussie.
  2. Redirige vers la même page si ModelState n'est pas valide.
  3. Rediriger vers une page d'accès refusé si une exception de sécurité est levée.

Je pense à refactorisation ces à un registre des congrès afin que je puisse avoir quelque chose comme:

When.ModelIsNull.RedirectTo<SharedController>(c => c.NotFound()); 
For("Edit").ModelStateIsInvalid.Redisplay(); 
For("Edit").OnSuccess.RedirectTo("Index"); 
On<SecurityException>().RedirectTo<SharedController>(c => c.AccessDenied()); 

Alors si je voulais changer la façon dont un comportement particulier fonctionne je change juste en un seul endroit. Par exemple, au lieu d'aller à Index, je pourrais rediriger vers la vue Affichage.

For("Edit").OnSuccess.RedirectTo("View"); 

J'espère que cela vous donne quelques idées.

Edit:Here est de savoir comment pourrait accomplir quelque chose de similaire en utilisant FubuMVC (que j'aime voler des idées de)

Questions connexes