2010-11-30 21 views
0

Une configuration de routage ou IIS particulière est-elle nécessaire lorsqu'une action de contrôleur utilise la même URL qu'un répertoire virtuel?Action ASP.NET MVC et répertoire virtuel avec le même chemin

J'ai une application ASP.NET MVC 1.0 qui nécessite l'authentification Windows appliquée à une seule action ("/ Login/FromWindows"). Pour ce faire, nous avons configuré un répertoire virtuel avec le même chemin que l'action (par exemple "/ Login/FromWindows") et activé l'authentification Windows dans IIS. Lorsque je visite l'URL/Login/FromWindows, je reçois une réponse HTTP 200 vide et rien n'est consigné dans le journal de texte du serveur. L'action "FromWindows" devrait consigner les messages et rediriger l'utilisateur vers la page d'accueil.

Il semble que le code d'action ne soit simplement pas exécuté, donc il y a peut-être un conflit avec le répertoire virtuel.

config Route dans Global.asax.cs

public static void RegisterRoutes(RouteCollection routes) 
{ 
    // snipped: ignored routes for images, scripts, etc. 

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

Répondre

1

Vous avez raison, le code d'action ne sont pas en cours d'exécution. En effet, les chemins de fichier existants (virtuels ou non) ont priorité sur les règles de routage MVC. Pourquoi utilisez-vous un répertoire virtuel? Réglez simplement l'authentification sur windows dans web.config et utilisez l'attribut [authorize] sur les méthodes d'action correspondantes.

Web.config:

<configuration> 
    <system.web> 
      <authentication mode=”Windows” /> 
    </system.web> 
</configuration> 

Méthode d'action:

[Authorize] 
public ActionResult SomeAction() 
{ 
    return View(); 
} 

Visitez http://www.asp.net/mvc/tutorials/authenticating-users-with-windows-authentication-vb pour plus d'informations sur mvc avec l'authentification Windows.

+0

Nous voulions utiliser des répertoires virtuels pour permettre le blocage des requêtes externes vers cette URL. Seuls les utilisateurs Windows internes du domaine pourront utiliser cette page, et nous ne voulons pas rendre nos serveurs vulnérables aux trous de l'authentification Windows. Pour être honnête, je ne sais pas pourquoi nous avons besoin de répertoires virtuels pour cela. Je suis en train de discuter avec nos serveurs pour trouver une meilleure solution. – MikeWyatt

+0

Oui, vous pouvez accomplir tout ce que vous venez de dire sans répertoires virtuels. Il n'y a pas de faille dans l'authentification des fenêtres si vous le faites de la bonne manière, mais faire un hybride comme vous êtes en ce moment ne fait que mendier des ennuis. Éliminez ces répertoires virtuels et appliquez les attributs d'authentification sur vos contrôleurs et/ou méthodes d'action correspondants. Ensuite, laissez simplement web.config s'inquiéter de la façon d'authentifier les utilisateurs. – Chev

+0

Nous avons besoin d'une forme de fichier ou de répertoire pour activer/désactiver les schémas d'authentification dans IIS, car notre équipe de serveurs ne veut pas autoriser les développeurs à activer/désactiver les schémas d'authentification dans le fichier web.config. J'écris actuellement un fichier ASPX qui exécute la logique qui était précédemment dans l'action. Le fichier ASPX sera alors configuré pour requérir l'authentification Windows, et une règle sera ajoutée à notre pare-feu pour bloquer l'accès externe à celui-ci. Ce n'est pas parfait, mais ça devrait marcher. – MikeWyatt

0

Il suffit simplement d'utiliser [Authorize] attribuer une mention Chevex ci-dessus, ou si vous voulez plus, vous pouvez personnaliser l'Autoriser par extension pour votre entreprise. A MON HUMBLE AVIS.