Url重写时碰到的问题.及我的解决

url重写的环境.
在使用控件的时候时候发现.当鼠标移过去的时候就出现了脚本错误.调试.一下子就发现了. .
WebResource.axd 原来是这个也是被重写处理了.结果位置不对.造成JS不能加载进来.

解决完了后.发现当鼠标移到菜单上的时候.发现了.

xxx.dddd.com/test.aspx 访问时

Menu路径变了.原本是 default.aspx 现在变成了 a.dddd.com/xxx/default.aspx   多了一个xxx
是我跟据域名条件重写的路径.

解决的话是把原来的 default.aspx 变成 ~/default.aspx 这样在url重写的路径访问是正常的但是

http://www.dddd.com/xxx/test.aspx 访问时 路径又不对了变成了 http://www.dddd.com/default.aspx 变成了这个.原本应该是 http://www.ddd.com/xxx/default.aspx

原因是控件本身对哪个跳转地址进行了处理.如果可以取消它的处理哪么就可以OK了.(待续)
还好自己没有必要用http://www.ddd.com/xxx/test.aspx 访问

下面这个是解决 form 提交的问题(代码网上抄的)

public class TemplateBasePage : Page
{
    
public TemplateBasePage()
    
{

    }

    
/**/
    
/// <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);
    }

    


   }

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);
    }

}

internal class FormFixerHtmlTextWriter : System.Web.UI.HtmlTextWriter
{
    
private string _url;
    
internal FormFixerHtmlTextWriter(TextWriter writer)
        : 
base(writer)
    
{
        _url 
= HttpContext.Current.Request.RawUrl;
    }


    
public override void WriteAttribute(string name, string value, bool encode)
    
{
        
if (_url != null && string.Compare(name, "action"true== 0)
        
{
            value 
= _url;
        }


        
base.WriteAttribute(name, value, encode);
    }

}
原文地址:https://www.cnblogs.com/lovebanyi/p/628196.html