伪URL Context.Server.Execute 出错

gzw13999 2009-04-24 10:56:33
UrlRewriter.cs


public class UrlRewriter : IHttpHandler //实现“IHttpHandler”接口
{
/// <summary>
/// 构造函数
/// </summary>
public UrlRewriter()
{

}
/// <summary>
/// 解析URL
/// </summary>
/// <param name="Context"></param>
public void ProcessRequest(HttpContext Context)
{
//取得原始URL屏蔽掉参数
string Url = Context.Request.RawUrl;

System.Xml.XmlDocument Dom = new System.Xml.XmlDocument();
Dom.Load(HttpContext.Current.Server.MapPath(System.Configuration.ConfigurationSettings.AppSettings["urlRewriter"]));//从web.config读取设置文件URLRewriterSettings.xml的路径
System.Xml.XmlNodeList ItemList = Dom.SelectSingleNode(@"//URLRewriters").ChildNodes;
foreach (System.Xml.XmlNode Node in ItemList)
{
//if(!Node.HasChildNodes) continue;
string Ph = Node.Attributes.GetNamedItem(@"Path").InnerText.ToString();
string Rh = Node.Attributes.GetNamedItem(@"RealPath").InnerText.ToString();
if (Ph.StartsWith(@"~")) Ph = HttpContext.Current.Request.ApplicationPath + Ph.Substring(1);
if (Rh.StartsWith(@"~")) Rh = HttpContext.Current.Request.ApplicationPath + Rh.Substring(1);
//建立正则表达式
System.Text.RegularExpressions.Regex Reg = new System.Text.RegularExpressions.Regex(Ph, System.Text.RegularExpressions.RegexOptions.IgnoreCase);
System.Text.RegularExpressions.Match m = Reg.Match(Url);//匹配
if (m.Success)//成功
{
for (int i = 1; i <= m.Groups.Count; i++)
{
Rh = Rh.Replace("$" + i.ToString(), m.Groups[i].Value);
}

Context.Server.Execute(Rh); //就是这里报错 为Text.aspx执行子请求时出错。
Context.Response.End();
break;
}

}

Context.Server.Execute(Context.Request.Url.PathAndQuery);

}
/// <summary>
/// 实现“IHttpHandler”接口所必须的成员
/// </summary>
/// <value></value>
public bool IsReusable
{
get { return false; }
}


}


URLRewriterSettings.xml


<?xml version="1.0" encoding="utf-8" ?>
<!--如有多个匹配,则优先级向下递减-->
<!--http://localhost:6679/httphandleUrlRewrite/22.html-->
<!--http://localhost:6679/httphandleUrlRewrite/a/b/c.html-->
<!--如有多个匹配,则优先级向下递减-->
<URLRewriters>
<URLRewriters Path=".index.aspx" RealPath="Text.aspx" /> //这里应该没问题. 都试过来了
<!-- <URLRewriters Path=".+?/(\d+).html" RealPath="~/aspx/show.aspx?id=$1" />
<URLRewriters Path="~/([^/]*)/([^/]*)/([^/]*).html" RealPath="~/aspx/show.aspx?par1=$1&par2=$2&par3=$3"/>-->
</URLRewriters>


Web.Config


<add key="urlRewriter" value="~/App_Data/URLRewriterSettings.xml"/>
<httpHandlers>

<add verb="*" path="?*.aspx" type="FyCms.Common.UrlRewriter" />
<!--加载重写类,并利用通配符粗略指定规则-->
</httpHandlers>


Context.Server.Execute(Rh); //就是这里报错 为Text.aspx执行子请求时出错。
...全文
192 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangxjn 2010-04-09
  • 打赏
  • 举报
回复
哥们。我也遇到这个问题。如何解决啊?
gzw13999 2009-04-24
  • 打赏
  • 举报
回复
补充.. 管理员身份运行VS 就正常了.
现在放进IIS 7 里面提示HTTP 404
IIS6 没有试

62,268

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧