首页 新闻 会员 周边

求教一个关于URL重写的问题。

0
悬赏园豆:100 [已解决问题] 解决于 2010-09-15 13:19

基本情况是这样

我有2个页面,采用IHttpHandler重写, 如

http://www.xx.com/news/1.aspx

http://www.xx.com/news/admin.aspx

 

现在的情况是: 进入了ProcessRequest方法以后,如果我return,则页面为空白,如果我用context.Response.WriteFile(context.Request.PhysicalPath); 则输出了Admin.aspx的源文件,并不会被执行。

我想请教的是:当客户访问 /admin.aspx 时不重写并执行aspx代码,访问1.aspx 时输出非"管理员页面的内容"这几个字符。

 

我的代码如下:

 

/// <summary>
/// 重写前台静态页面
/// </summary>
public class UrlRewriterLogic : Page,IHttpHandler
{
/// <summary>
/// 根据URL读取此页面对应的内容
/// </summary>
/// <param name="context"></param>
void IHttpHandler.ProcessRequest(HttpContext context)
{
string RawUrl = context.Request.RawUrl.ToLower();
if (RawUrl.IndexOf("admin") != -1)
{
return;
}
context.Response.Write(
"非管理员页面的内容");
}

bool IHttpHandler.IsReusable
{
get { return true; }
}
}

 

问题补充: 实际上就是相同后缀的情况下, url重写的条件筛选问题, 一部分重写,一部分不重写。而我现在的问题是 只要进入了ProcessRequest方法,就无法控制了。 我需要的 应该是一个 进入了ProcessRequest方法后,依然能继续执行ASPX代码的方法。 感谢两位的回答, 佛本慈悲的连接我看过好几次的,也许我没看懂,总之问题没解决到。 狼Robot的回答只解决了单个问题,不带有普遍性,所以也不适用,我不能把几十上百个文件都这样操作的。
胡显明的主页 胡显明 | 初学一级 | 园豆:100
提问于:2010-09-14 14:06
< >
分享
最佳答案
0

简单啦,你在web.config中把news/admin.aspx的HttpHandler强制设定到ASP.NET的处理程序就OK啦.

比如在system.web.httphandler中加入:

<add verb="*" path="/news/admin.aspx" type="System.Web.Script.Services.ScriptHandlerFactory"/>

收获园豆:100
I,Robot | 大侠五级 |园豆:9783 | 2010-09-14 15:25
你还有其它文件啊,早说嘛,那你用HttpContext.Server.Execute(url)吧.
I,Robot | 园豆:9783 (大侠五级) | 2010-09-14 18:57
问题已解决了。直接写HttpContext.Server.Execute(url)的话程序会陷入死循环, 目前采用的是: /// <summary> /// 自定义页面解析类 /// </summary> public class UrlRewriterLogic : PageHandlerFactory, IRequiresSessionState { /// <summary> /// 构造函数 /// </summary> public UrlRewriterLogic() { } /// <summary> /// 重写GetHandler方法 /// </summary> public override IHttpHandler GetHandler(HttpContext context, string requestType, string virtualPath, string path) { //如果文件存在,就直接解析 if (File.Exists(path)) { return base.GetHandler(context, requestType, virtualPath, path); } else { //否则就采用自定义方法解析并输出文件 ResponseContent(context); return null; } } }
胡显明 | 园豆:100 (初学一级) | 2010-09-15 13:18
不错不错,我后来也想到了Execute可能会无限循环的问题,但没实践.谢谢分享.
I,Robot | 园豆:9783 (大侠五级) | 2010-09-15 14:35
其他回答(1)
0
HUHU慈悲 | 园豆:9973 (大侠五级) | 2010-09-14 14:41
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册