2012-04-16 2 views
3

J'ai une application Web ASP.NET 4.0 et je dois héberger une application ASP.NET MVC sur le même site Web (ie dans le même processus IIS - même session, modules, etc.)J'ai besoin d'une bonne approche pour héberger des fichiers ASP.NET MVC dans un sous-dossier d'une application ASP.NET Web Forms

Cela fonctionne assez facilement tant que le dossier/les fichiers des deux se trouvent dans le dossier racine.

Comment puis-je autoriser proprement les fichiers MVC à être tous contenus dans un sous-dossier?

J'ai un moteur de vue qui ajoute les formats d'emplacement pour le sous-dossier. Cela permet à tout le contrôleur/vue de fonctionner correctement, mais j'ai besoin d'une bonne solution pour les fichiers de contenu. À l'heure actuelle, je dois faire attention à faire en sorte que tous les chemins dans l'application MVC pour pointer vers le nom du sous-dossier MVC, comme dans:

Url.Content("~/mvc/Content/Site.css") 

Quelles sont les options solides pour y parvenir?

Je ne souhaite pas que les demandes adressées à des formulaires Web soient affectées. Cette logique ne devrait manipuler les URL qui peuvent être résolus dans le moteur MVC (ou manipuler toutes les URL sauf URL qui peuvent être résolus par le moteur Web Forms seul)

Edit: Il est une exigence de client que les deux sites partager la même session IIS, donc une application distincte est hors de la table pour le moment. Pas intéressé par le partage de session entre les processus IIS à ce stade.

+0

Pouvez-vous créer une application secondaire dans e Site IIS? (Site IIS> Ajouter une application) – jorgebg

+0

Pourquoi les dossiers standards ne fonctionnent-ils pas? Les vues et les contrôleurs MVC vont généralement dans un dossier '~/Views /', et tous les fichiers de support tels que CSS et JS peuvent être placés dans d'autres dossiers et référencés comme il convient. – Tejs

+0

Je souhaite que les dossiers/fichiers liés au MVC du site soient séparés car ce projet implique un long chemin de migration à la fin duquel le site de formulaires Web disparaîtra entièrement. Cette question fait partie d'une tentative de limiter les modifications apportées au site existant ainsi que de limiter la restructuration/organisation nécessaire pour mettre hors service le site de formulaires Web. –

Répondre

3

Je voudrais simplement créer un ensemble d'extensions d'assistance d'URL qui en tiendraient compte pour moi.

La classe d'extension

namespace Core.Extensions{ 
    public static class UrlHelperExtensions 
    { 
     public static string Image(this UrlHelper helper, string fileName) 
     { 
     return helper.Content("~/mvc/Content/Images/" + fileName); 
     } 

     public static string Stylesheet(this UrlHelper helper, string fileName) 
     { 
     return helper.Content("~/mvc/Content/Css/" + fileName); 
     } 

     public static string Script(this UrlHelper helper, string fileName) 
     { 
     return helper.Content("~/mvc/Content/Scripts/" + fileName); 
     } 
    } 
} 

de web.config

<system.web.webPages.razor> 
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
    <pages pageBaseType="System.Web.Mvc.WebViewPage"> 
     <namespaces> 
     <add namespace="System.Web.Mvc" /> 
     <add namespace="System.Web.Mvc.Ajax" /> 
     <add namespace="System.Web.Mvc.Html" /> 
     <add namespace="System.Web.Routing" /> 
     <add namespace="Core.Extensions" /> <-- Add your extension namespace here 
     </namespaces> 
    </pages> 
    </system.web.webPages.razor> 

Utilisation Vues

<link href="@Url.Stylesheet("site.css")" rel="stylesheet" type="text/css" /> 
<script src="@Url.Script("jquery-1.7.1.min.js")" type="text/javascript"></script> 
<img src="@Url.Image("MyImageName.jpg")" /> 

<!--CSS in a sub directory from your root that you specified in your Extension class --> 
<link href="@Url.Stylesheet("SomeDirectory/otherCss.css")" rel="stylesheet" type="text/css"/> 
1

Une solution réalisable consiste à créer un sous-domaine pour l'application MVC, ex. mvc.mydomain.com. Il fournit une séparation claire entre les applications qui sont facilement intégrées, et ne nécessite pas de domaine supplémentaire.

Questions connexes