zoukankan      html  css  js  c++  java
  • [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址?

    如何在URL重写后,form标记中的Action值也用虚拟地址?

    以免失踪,转了

    例如我们将一个地址"showpost.aspx?postid=1000"重写为"posts/1000.aspx",如果这个页面中有个表单(form),那么输出到浏览器的HTML中,这个表单的action属性为<form action="showpost.aspx?postid=1000">而不是我们期望的<form action="1000.aspx">,这样就会暴露我们的真实地址,而且感觉也不爽。

    我们可以通过自定义页面基类,重写默认的HtmlTextWriter方法,重写属性输出WriteAttribute(string name, string value, bool encode)方法,当输出action时,将action属性的值强制转换为当前虚URL(HttpContext.Current.Request.RawUrl,上面的1000.aspx)

    最后就是让所有的页面都调用这个基类,修改一下Web.config就好了
    <!-- Openlab.Controls.OLPage为页面基类,Openlab.Controls为基类所在dll -->
    <pages pageBaseType="Openlab.Controls.OLPage, Openlab.Controls"/>

    附页面基类完整代码(参考CS代码完成):

    using System; using System.IO; using System.Web; using System.Web.UI; namespace Openlab.Controls { /// <summary> /// 页面基类 /// </summary> public class OLPage : Page { public OLPage() { } #region Render /// <summary> /// 重写默认的HtmlTextWriter方法,修改form标记中的value属性,使其值为重写的URL而不是真实URL。 /// </summary> /// <param name="writer"></param> protected override void Render(HtmlTextWriter writer) { if (writer is System.Web.UI.Html32TextWriter) { writer = new FormFixerHtml32TextWriter(writer.InnerWriter); } else { writer = new FormFixerHtmlTextWriter(writer.InnerWriter); } base.Render(writer); } #endregion } #region FormFixers #region FormFixerHtml32TextWriter internal class FormFixerHtml32TextWriter : System.Web.UI.Html32TextWriter { private string _url; // 假的URL internal FormFixerHtml32TextWriter(TextWriter writer):base(writer) { _url = HttpContext.Current.Request.RawUrl; } public override void WriteAttribute(string name, string value, bool encode) { // 如果当前输出的属性为form标记的action属性,则将其值替换为重写后的虚假URL if (_url != null && string.Compare(name, "action", true) == 0) { value = _url; } base.WriteAttribute(name, value, encode); } } #endregion FormFixerHtmlTextWriter #endregion }
  • 相关阅读:
    JSDeferred 源码分析
    前端MVVM框架avalon揭秘
    前端MVVM框架avalon揭秘
    轻量级前端MVVM框架avalon源码分析-总结
    JavaScript 中介者模式与观察者模式有何不同?
    Knockout 新版应用开发教程之"text"绑定
    Knockout 新版应用开发教程之"visible"绑定
    Knockout 新版应用开发教程之Observable Arrays
    设计模式之美:Decorator(装饰)
    设计模式之美:Composite(组合)
  • 原文地址:https://www.cnblogs.com/syveen/p/840132.html
Copyright © 2011-2022 走看看