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

これら 2 つの Web サイトに別のアプリケーション プールを設定してみましたか? 「賢く」しようとしているように見え、2 つの仮想ディレクトリが実際には同じ Web サイトであると結論付けています。

他のすべてが失敗した場合は、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 に答える