0

基本概述...

我在 iis 中有一个站点设置...-
“mysite”(wwwroot\mysite)下有 2 个虚拟目录应用程序
-“uploads”(\uploadfiles)
-“app”(wwwroot\myapp)

我还有一个子域,它在 iis 中设置为不同的站点...
- “beta.mysite”(wwwroot\mysitebeta)下有 2 个虚拟目录
- “uploads”(\uploadfiles)
- “app”(wwwroot \myappbeta)

子域工作正常....我可以输入https://beta.mysite.com/app ...它会显示测试版站点登录非常好....问题是,当我点击在创建回帖的任何按钮上...它恢复为https://www.mysite.com/app ...

所有链接都显示其文件的正确相对路径....如果我输入https://beta.mysite.com/app/dir/page.aspx ...它实际上会转到该页面测试版网站,所有链接都指向正确的位置......它只是让我死去的回发......

4

1 回答 1

1

您是否尝试过为这两个网站设置不同的应用程序池?看起来它试图变得“聪明”并得出结论,这两个虚拟目录实际上是同一个网站。

如果一切都失败了,您可以重写 ASP.NET 手动生成的 FORM 标记中的回发 URL。使用 App_Browsers 文件和 ControlAdapter 可能是最干净的方法。

我有一个这样的 ControlAdapter 实现示例,尽管它旨在与 URL 重写一起使用,以防止在回发时恢复到实际的幕后 URL。但是,我认为它可以开箱即用地解决您的问题

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文件:

<browsers>
    <browser refID="Default">
        <controlAdapters>
            <adapter controlType="System.Web.UI.HtmlControls.HtmlForm" adapterType="FormRewriterControlAdapter" />
        </controlAdapters>
    </browser>
</browsers>
于 2009-06-10T15:03:05.193 回答