2009-06-10 5 views
0
question

vue d'ensemble ...domaine

j'ai une configuration de site dans ...
iis - "monsite" (wwwroot \ monsite) sous qu'il ya 2 applications de répertoire virtuel
- "ajouts" (\ uploadfiles)
- "app" (wwwroot \ myapp)

J'ai aussi un sous-domaine qui est mis en place comme un site différent ...
iis - "beta.mysite" (wwwroot \ mysitebeta) en dessous il y a 2 répertoire virtuel
- "uploads" (\ uploadfiles)
- « app » (wwwroot \ myappbeta)

le sous-domaine fonctionne bien .... je peux taper https://beta.mysite.com/app ... et il fait apparaître le site bêta journal parfaitement bien .... le problème est, quand je clique sur l'un des boutons qui créent un poste de retour ... il revient à https://www.mysite.com/app ...

tous les liens afficher le chemin relatif correct à leurs fichiers .... et si je tape dans https://beta.mysite.com/app/dir/page.aspx ... il va effectivement aller à cette page sur le site bêta, tous les liens vont aux bons endroits ... c'est juste les publications qui me tue ...

Répondre

1

Vous avez essayé de définir un pool d'applications différent pour ces deux sites Web? On dirait qu'il essaie d'être "intelligent" et conclut que les deux répertoires virtuels sont en fait le même site Web.

Si tout le reste échoue, vous pouvez réécrire l'URL de publication dans la balise FORM que ASP.NET génère manuellement. L'utilisation d'un fichier App_Browsers et d'un ControlAdapter est probablement le moyen le plus propre de le faire.

J'ai un exemple d'une telle implémentation de ControlAdapter, bien qu'il soit prévu de travailler avec la réécriture d'URL pour éviter de revenir à l'URL réelle en arrière-plan lors de la publication. Cependant, je pense que cela fonctionnerait pour votre problème hors-the-box

public class FormRewriterControlAdapter : System.Web.UI.Adapters.ControlAdapter 
{ 
    protected override void Render(HtmlTextWriter writer) 
    { 
     base.Render(new RewriteFormHtmlTextWriter(writer)); 
    } 
} 

public class RewriteFormHtmlTextWriter : HtmlTextWriter 
{ 
    private const string contextItemKey = "FormActionWritten"; 

    public RewriteFormHtmlTextWriter(HtmlTextWriter writer) : base(writer) 
    { 
     InnerWriter = writer.InnerWriter; 
    } 

    public RewriteFormHtmlTextWriter(System.IO.TextWriter writer) : base(writer) 
    { 
     base.InnerWriter = writer; 
    } 

    public override void WriteAttribute(string name, string value, bool fEncode) 
    { 
     // If the attribute we are writing is the "action" attribute, and we are not on a sub-control, 
     // then replace the value to write with the raw URL of the request - which ensures that we'll 
     // preserve the PathInfo value on postback scenarios 

     if (name == "action" && !HttpContext.Current.Items.Contains(contextItemKey)) 
     { 
      // Use the Request.RawUrl property to retrieve the un-rewritten URL 
      value = HttpContext.Current.Request.RawUrl; 
      HttpContext.Current.Items[contextItemKey] = true; 
     } 

     base.WriteAttribute(name, value, fEncode); 
    } 
} 

Form.browser fichier:

<browsers> 
    <browser refID="Default"> 
     <controlAdapters> 
      <adapter controlType="System.Web.UI.HtmlControls.HtmlForm" adapterType="FormRewriterControlAdapter" /> 
     </controlAdapters> 
    </browser> 
</browsers> 
+0

ai essayé une nouvelle piscine app ... pas de dés ... Le problème avec la réécriture des choses est que la beta sera utilisée comme site de test pour les tests des clients ... Je travaille avec plus de 40 projets contenant plus de 100 classes, y compris les contrôles personnalisés ... – Patrick

+0

Pas besoin de réécrire quoi que ce soit, le code ci-dessus devrait être tout ce qui est nécessaire pour résoudre le problème. – Thorarin