【问题标题】:Sub domain issue子域问题
【发布时间】:2010-11-01 20:09:41
【问题描述】:

基本概述...

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

我还有一个在 iis 中设置为不同站点的子域...
- "beta.mysite" (wwwroot\mysitebeta) 下有 2 个虚拟目录
- “上传” (\uploadfiles)
- “应用程序”(wwwroot\myappbeta)

子域工作正常....我可以输入https://beta.mysite.com/app ...它会完美地打开测试版站点登录....问题是,当我单击任何按钮时创建回帖...它恢复为https://www.mysite.com/app...

所有链接都显示其文件的正确相对路径....如果我输入https://beta.mysite.com/app/dir/page.aspx...它实际上会转到测试站点上的那个页面,所有链接都指向右侧斑点...它只是杀死我的回发...

【问题讨论】:

    标签: iis dns subdomain


    【解决方案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>
    

    【讨论】:

    • 尝试了一个新的应用程序池...没有骰子...重写的问题是测试版将用作客户测试的临时站点...我正在使用40 多个项目,包含 100 多个类,包括自定义控件...
    • 不需要重写任何东西,上面的代码应该是解决问题所需的全部内容。
    猜你喜欢
    • 2015-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-06
    • 2013-04-27
    相关资源
    最近更新 更多