7
votes

Exécution d'une application ASP.NET MVC à partir d'un répertoire virtuel de IIS7

est-il possible d'exécuter une application MVC à partir d'un répertoire virtuel de l'IIS7? J'ai construit une application utilitaire open source sur ASP.NET MVC3 et je me demandais si c'était une erreur; Il est probable que le site ne puisse pas être exécuté à partir d'un répertoire virtuel.

Prendre un itinéraire par défaut simple de / home / index Si vous utilisez un répertoire virtuel nommé / app , sera effectivement / l'index de l'application / home. Quel genre de gâche les choses pour router.

Je ne veux pas qu'un utilisateur ait à modifier les itinéraires et à recompiler le projet pour utiliser l'application dans un répertoire virtuel. Existe-t-il un moyen de modifier un paramètre de configuration pour indiquer le dossier racine de l'application de l'application?


0 commentaires

5 Réponses :


2
votes

Oui cela fonctionne. Et tant que vous utilisez les méthodes d'assistant pour créer des URL d'action (par exemple <% = html.actionLink (...)%> Il n'est pas nécessaire de reconfigurer ou de recompiler.


2 commentaires

Aussi tant que j'utilise les méthodes d'assistant de mon point de vue, ASP.NET MVC saura simplement savoir où elle fonctionne et bascule ses URL et son acheminement de cela?


@Bretski: Exactement (voir la réponse détaillée de Darin).



23
votes

est-il possible d'exécuter une application MVC à partir d'un répertoire virtuel de IIS7? P>

Non seulement cela est possible mais c'est la manière préférée. P>

Quel genre de dégage des choses pour router. p> blockQuote>

pas si vous utilisez des aides HTML lors de la gestion des URL qui s'en occuperont. p>

Voici un exemple typique de ce que vous ne devez jamais faire: p> xxx pré>

et voici comment cela devrait être fait: P>

@using (Html.BeginForm("Index", "Home"))
{

}


12 commentaires

Juste curieux: pourquoi est-ce la préféré Way?


@ M4N, parce que chaque application ASP.NET (selon laquelle elle est MVC ou non) doit résider dans un répertoire virtuel. Si vous le déployez sur la racine du site, ce site racine représente toujours un répertoire virtuel.


Ok l'a eu. Mais il n'y a rien contre le déploiement sur la racine du site.


@ M4n, absolument rien contre.


Qu'est-ce que j'appelle depuis une classe (pas une classe de contrôleur ou une vue) pour obtenir la voie à suivre, / home / index?


@Bretski: Généralement, vous ne le faites pas. Autant que possible, gardez la connaissance des valeurs d'URI dans les points de vue.


@Brettski, comme @Craig a dit, vous ne le faites jamais. Une classe ne doit jamais nécessiter de calculer les URL. C'est la responsabilité des contrôleurs, des aides, des points de vue, de sorte que si votre classe a besoin d'une URL, transmettez-la, mais ne l'avez jamais calculée (et même pire, codée hardcode).


Cela rend un sens parfait, certainement plus propre à transmettre la valeur dans. Merci.


Il y a aussi ceux qui diraient «URL: '@ URL.Action (« Index »,« Home »)'» est également incorrect. Vous devez également utiliser JSON pour obtenir les données JavaScript et transmettre ceux-ci dans l'appel AJAX et ne pas échanger les types de code. Je ne suis pas et je serais d'accord à 100% avec la façon dont Darin l'a ici (bien que l'analyse de Razor soit parfois gâchée par le mélange de code dans un bloc de script et que ces problèmes peuvent être ignorés)


Parce que les développeurs que nous devrions utiliser des outils réels, les mêmes outils que nous utiliserions sur un serveur de développement, de mise en scène ou de production. Pourquoi quelqu'un voudrait-il utiliser une merde stupide Cassini ... Cela provoque des problèmes que je n'ai pas besoin d'entrer dans les détails pourquoi ... le chercher. Pourquoi ne pas utiliser IIS devrait être la question. La communauté de Dev est un groupe d'ânes paresseux qui ne veulent pas apprendre à faire leur travail ... une partie de cela est d'apprendre IIS, vous pouvez donc apprendre comment les piscines d'app fonctionne, les gestionnaires de pages et bien plus encore. Obtenez dans le ballon, arrêtez d'utiliser SHITTY CASSINI. VOILÀ POURQUOI.


Souhaite que SM arrête de faire ces jouets amateurs. De quoi je parle? Des trucs censés aider à développer des devts plus facilement, mais sont vraiment des ordures: ASP.NET Adhésion, Cassini, SharePoint, Ensembles de données, Biit comme ça. Les développeurs doivent cesser d'utiliser cette corbeille et oui faire des solutions de code de code et de code de code réelles plus évolutives que d'utiliser ces outils Trashy. CODE Votre propre fournisseur de membres, pourquoi pas. Non, ce n'est pas si difficile.


Salut. J'essaie d'exécuter une application MVC 4 à partir d'un répertoire virtuel mais continue à obtenir une erreur globale.asax. Pouvez-vous s'il vous plaît dire si vous avez ceci pour travailler? Quelqu'un voudrait-il vérifier cette question: Stackoverflow.com/Questtions/15961052/...



3
votes

Oui, cela fonctionne bien et non, Cela ne gâche pas Routage . Toutefois, l'application que vous utilisez peut être buggy et ne pas prendre en charge cette configuration.

Vous n'avez pas besoin d'un "paramètre de configuration", car IIS et ASP.NET le gère déjà correctement. P>

Vous avez toutefois besoin d'éviter les URI codées sur votre point de vue. P>

par exemple, faites ceci: p>

<img src="/Content/Images/Image.png" />


1 commentaires

Comment éviter d'éviter les URI codées dur (pour les images de fond, les polices personnalisées, etc.) dans des feuilles de style? Les fonctions Helper MVC ne sont pas disponibles dans les fichiers CSS ...



3
votes

Autant que je connaisse les itinéraires ne repose tous sur la racine de l'application, pas la racine réelle, alors pensez à eux comme commençant par ~ / , pas /


0 commentaires

0
votes

Juste au cas où il aide quelqu'un, j'ai rencontré un problème dans lequel mes actions MVC sont dynamiques, je ne pouvais donc pas avoir .NET Générez la bonne URL pour moi en utilisant les méthodes décrites dans le poste de réponse accepté. Je pourrais utiliser le côté du serveur "~ /" mais pas dans JavaScript, etc. Ma solution consistait à écrire une méthode partagée qui construit l'URL à l'aide du nom de l'application que je reçois de: xxx

Exemple : "/ Maintien / gérer / gérer" Si "Maint" est le nom de ma demande qui peut être différent sur certains serveurs, "Gérer" est le nom de mon contrôleur et "Utilisateurs" est une action dynamique qui sort d'une base de données: xxx


0 commentaires