2011-06-29 3 views
1

Il s'agit relativement d'une question noob. Lors du développement d'un site Web ASP.Net, si je fais référence à une ressource avec la méthode ResolveUrl(), il fonctionne sur le serveur ou le serveur de développement, mais pas sur les deux, en fonction de l'URL fournie. Par exemple, si mon code essaie de sélectionner une ressource avec le code ci-dessous, cela fonctionne sur le serveur live mais pas sur le serveur de développement car JScript.js n'est pas sous http://localhost:xx/Assets mais sous http://localhost:xx/ApplicationName/Assets. Afin de le faire fonctionner sur les deux serveurs, je dois continuer à changer l'URL en fonction du serveur sur lequel je travaille.Modification des URL lors du déplacement du projet du serveur de développement vers le serveur actif

J'ai souffert ce problème ennuyeux pendant un certain temps mais ai continué à l'ignorer.

Y a-t-il une meilleure façon de le faire?

Merci!

+1

Si vous souhaitez que les deux soient sous le même chemin d'application, dans Visual Studio accédez aux propriétés de vos projets Web, cliquez sur le site Web et modifiez le "Chemin virtuel" pour correspondre au nom de votre application de production. – Zachary

+0

J'ai essayé de changer le chemin virtuel de '/ MyIntranet' à'/'mais le fichier n'a pas été choisi. –

+0

Si vous regardez l'URL/la source de la page, est-ce qu'il affiche maintenant le nom de l'application? Sur votre boîte de dev locale, quel est le chemin de travail de "JScript.js"? – Zachary

Répondre

1

Comme écrit dans mes commentaires ci-dessus, vous voulez utiliser un <% =%> contre <% #%> rendre une expression en ligne. Vous utilisez uniquement le symbole de hachage pour la liaison de données en ligne.

0

Essayez de créer http://localhost:xx/ApplicationName une application virtuelle sur la machine DEV. De cette façon ~/Les actifs seront dans la racine de l'application sur PROD et DEV

Fondamentalement, le répertoire "Assets" doit être à la racine de votre App, vous devez donc faire le parent de "Actifs" la racine de l'application sur Dev et PROD.

+0

Je n'utilise pas mon application sur IIS. J'utilise le serveur de développement qui vient avec VS. –

1

Je sais que ce n'est peut-être pas la méthode standard, mais je les utilise pour m'assurer que les adresses URL sont corect dans mes applications sans problème. avec ces disponibles dans ma page/Voir ses classes de base ...

public static string ApplicationRootUrl() 
     { 
      string port = String.Empty; 

      if (HttpContext.Current.Request.ServerVariables["SERVER_PORT"] != null && HttpContext.Current.Request.ServerVariables["SERVER_PORT"].ToString() != "80" && HttpContext.Current.Request.ServerVariables["SERVER_PORT"].ToString() != "443") 
      { 
       port = String.Concat(":", HttpContext.Current.Request.ServerVariables["SERVER_PORT"].ToString()); 
      } 

      string protocol = "http://"; 

      if (HttpContext.Current.Request.ServerVariables["SERVER_PORT_SECURE"] != null && HttpContext.Current.Request.ServerVariables["SERVER_PORT_SECURE"] != "0") 
      { 
       protocol = "https://"; 
      } 

      return String.Concat(protocol, String.Concat(HttpContext.Current.Request.Url.Host, port, HttpContext.Current.Request.ApplicationPath, '/').Replace(@"//", @"/").ToLower()); 
     } 

     /// <summary> 
     /// Expands a virtual URL to an absolute URL using the current application root url 
     /// </summary> 
     /// <param name="url"></param> 
     public static string ExpandUrl(string url) 
     { 
      if (url.Trim().StartsWith("~")) 
      { 
       return String.Concat(ApplicationRootUrl(), url.Substring(1).Replace("//", "/")); 
      } 

      if (url.Trim().StartsWith("www", StringComparison.OrdinalIgnoreCase)) 
      { 
       return String.Concat("http://", url); 
      } 

      return url; 
     } 
+0

Pour une raison quelconque, je crois qu'il y aura un meilleur moyen Mark. Peut être changer dans le fichier de configuration ou similaire. Je vais essayer votre code comment jamais. Merci! –

Questions connexes