一个网站项目改版升级后用 httpModules 重写了URL,重写的名称是.htm 但部署时发现,网站上现有真实存在的.HTM文件确无法访问了。服务器环境是windows 2003 IIS6 。到GOOGLE上搜索一下找到如下解决办法。
在web.config文件中加入
1、在<compilation debug="true"> 节点加入
<buildProviders>
<add extension=".htm" type="System.Web.Compilation.PageBuildProvider"/>
</buildProviders>
2、在 <httpHandlers> 节点加入
<add verb="GET,POST" path="*.htm" type="System.Web.UI.PageHandlerFactory" validate="false"/>
这样修改后真实的.HTM页面是能显示了,但速度很慢,打开一个真实的.HTM页面都要3秒以上的时间。在到GOOGLE上搜了一圈,也没有找到答案。
本人就拿死马当活马医,自己继承了IHttpHandler 实现了一个HttpHandler处理,代码如下using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.IO;
namespace Aoecn.HttpHandler
{
/// <summary>
///
/// </summary>
public class HtmHandler: IHttpHandler
{
#region IHttpHandler 成员
public bool IsReusable
{
get { return true; }
}
public void ProcessRequest(HttpContext context)
{
string filepath = context.Request.Url.AbsolutePath;
filepath = filepath.Replace("/","\\");
filepath = string.Concat(@"d:\web",filepath);
if (File.Exists(filepath) == false)
{
filepath = @"d:\web\404.html";
}
string tempstr;
using (StreamReader sr = new StreamReader(filepath, Encoding.UTF8))
{
tempstr = sr.ReadToEnd();
}
context.Response.Write(tempstr);
context.Response.End();
}
#endregion
}
}
然后修改web.config文件,把原来的 <add verb="GET,POST" path="*.htm" type="System.Web.UI.PageHandlerFactory" validate="false"/>
换成
<add verb="GET,POST" path="*.htm" type="Aoecn.HttpHandler.HtmHandler,Aoecn.HttpHandler" validate="false"/>
自己的HttpHandler就是把URL请求转换成服务器文件路径,然后在读取出来输出。没有想到的是速度相当的快。打开页面基本没有等待。而且重写部分的htm也真常显示。
本文作者:网友 来源:博客园 http://www.cnblogs.com/ghfsusan/
CIO之家 www.ciozj.com 微信公众号:imciow