7 votes

Pages d'erreur personnalisées dans différentes zones en ASP.NET MVC3

J'ai mis en place des pages d'erreur personnalisées sur mon site à l'aide des éléments suivants

<customErrors mode="RemoteOnly" defaultRedirect="~/Error">
  <error statusCode="500" redirect="~/Error/InternalError"/>
  <error statusCode="404" redirect="~/Error/FileNotFound"/>
  <error statusCode="403" redirect="~/Error/AccessDenied"/>
</customErrors>

Cependant, il existe une autre zone sur le site, les fournisseurs, et lorsqu'une erreur se produit dans la zone des fournisseurs, la redirection se fait vers Suppliers/Error/. _ . Comme je n'ai pas de pages d'erreur ici, le site semble se bloquer et n'affiche jamais les pages d'erreur. Comment puis-je résoudre ce problème sans avoir à copier les pages d'erreur dans la zone des fournisseurs ?

1voto

Timtek Points 55

D'après ce que j'ai compris, avec MVC, la composition de votre URL est par défaut :

Domaine/Contrôleur/Action/id

Si vous avez un contrôleur "Erreur". Dans votre logique, vous vérifiez si la demande provient d'un utilisateur du site qui devrait être redirigé vers la page d'erreur "Fournisseurs".

 [HandleError]
    public ActionResult Index()
    {
        // Test to see if you need to go to the SuppliersController
        if (this.User.IsInRole("supplier"))
        {
            return Redirect("/Suppliers/Error");
        }
        else
        {
            return View(); // This returns the "Error" View from the shared folder
        }
    }

redirige vers une action de traitement des erreurs sur votre contrôleur de fournisseurs qui renverra la bonne vue.

public class SuppliersController : Controller
{
    //
    // GET: /Suppliers/

    public ActionResult Error()
    {
        return View("Error","SomeMasterPage"); // No "Error" view in Suppliers View folder, so it uses the one in shared folder
    }

}

Vous pouvez également utiliser le [Authorize] de l'action d'erreur des fournisseurs pour s'assurer que l'utilisateur est connecté.

De cette façon, vous obtiendrez votre désir /Fournisseurs/Erreur et peut utiliser l'action SuppliersController pour spécifier la vue, le modèle et la page maître/mise en page souhaités.

Consultez également cette réponse très complète à une question similaire :

Meilleur exemple 404 que je puisse trouver pour mvc

-1voto

Viraj Patel Points 52

Je pense que supprimer le "~" avant la page d'erreur devrait faire l'affaire, vous aurez besoin du "\" cependant.

Une autre solution serait d'écrire l'URL COMPLÈTE dans l'attribut redirect/defaultRedirect.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X