httpModules httphandle
最近要给客户迁移他的网站,因为之前有独立的服务器,可以设置iis绑定空主机头,所有url可以实现无限子域名,但是现在要更换服务器到虚拟主机上,就不能绑定空主机头了,但是之前的子域名必须保证还可以访问.
后来就想到可以利用HTTPmodules来实现一个url的转发.顺便再详细了解一下他们的概念.
1.httpModules(Http模块,可以在页面处理前后、应用程序初始化、出错等时候加入自己的事件处理程序)
2.Httphandle(处理具体后缀的文件)
3. HttpHandlerFactory (用来创建Http处理程序,创建的同时可以附加自己的事件处理程序)
<add name="ModuleName"
type=".NET Class, Assembly [,Version=version number]
[,Culture=culture] [,PublicKeyToken=token]"/>
属性
属性 | 说明 |
name | 必选的属性。 为模块提供一个好记的名称,这使您可为 global.asax 文件内的模块事件关联一个事件处理程序。 |
type | 必选的属性。 指定由版本、程序集和公钥标记组成的逗号分隔的类/程序集组合。ASP.NET 首先在应用程序的专用 \bin 目录中搜索程序集 DLL,然后在系统程序集缓存中搜索程序集 DLL。 |
Machine.config是在IIS第一次访问ASP.net时
Web.config 是在第一次访问虚拟目录所代表的应用程序时加载
还有Web.config 发生变化时
代码如下:
public class UrlHttpModule : IHttpModule
{
public void Init(HttpApplication application)
{
application.BeginRequest += new EventHandler(Application_BeginRequest);
}
private void Application_BeginRequest(object sender, EventArgs e)
{
HttpApplication application = (HttpApplication)sender;
HttpContext context = application.Context;
HttpRequest request = application.Request;
HttpResponse response = application.Response;
string[] url = request.Url.Host.Split('.');
if (url.Length == 4)
{
response.Redirect("http://www.xxx.com/Merchant/?domain=" + url[1]);
}
//response.Write(request.Url.Host + url.Length);
//response.Redirect("/");
}
public void Dispose()
{
}
}