开发者

Changing postback URL to hide Default.aspx

I am attempting to hide the document name from the user by using a folder with appending querystring in the following format:

http://localhost:53779/s/?x=FF2F60195B21487FA19A8EE7767A206C

When I post back the page, it directs it to the physical page:

http://localhost:53779/s/default.aspx?x=FF2F60195B21487FA19A8EE7767A206C

It it possible to motify the postback address so开发者_如何学运维 I can omit the default.aspx from the client browser?


Since .Net 2.0 (I think) you can manually set the Form's action attribute to whatever you want:

<form id="form1" runat="server" action="/">

You can also do that in code-behind:

form1.Action = "/?" & Request.ServerVariables("QUERY_STRING")


I'm using this ControlAdapter which modify action attribute of FORM element to actual url. It's usefull also for url rewriting.

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


    public class RewriteFormHtmlTextWriter : HtmlTextWriter
    {

        public RewriteFormHtmlTextWriter(HtmlTextWriter writer)
            : base(writer)
        {
            this.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 ((name == "action"))
            {

                System.Web.HttpContext Context = System.Web.HttpContext.Current;

                if (Context.Items["ActionAlreadyWritten"] == null)
                {
                    value = Context.Request.RawUrl;
                    Context.Items["ActionAlreadyWritten"] = true;
                }
            }
            base.WriteAttribute(name, value, fEncode);
        }

    }

you must register this adapter in App_Browsers directory like this:

<adapter controlType="System.Web.UI.HtmlControls.HtmlForm"  adapterType="MyNamaspace.FormRewriteAdapter" />
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜