aspnetcdn 例子, 中文注释之 MyGlobalApplication.cs

aspnetcdn 一共分为两个工程. 一个为aspnetcdn.dll 工程, 一个是事例网站.


事例网站主要的文件便是 App_Code/MyGlobalApplication.cs

以下是 v0.1的代码的中文注释

using System;
using System.Collections.Generic;
using System.Web;

//使用aspnetcdn的网站必须继承aspnetcdn.AspNetApplication并且override CreateWebsiteRequest方法
//然后在Global.asax中引用:<%@ Application Language="C#" Inherits="MyGlobalApplication" %>
public class MyGlobalApplication : aspnetcdn.AspNetApplication
{
	///override这个方法后, 这个方法就会被BeginRequest的时候被调用
	protected override aspnetcdn.WebsiteRequest CreateWebsiteRequest()
	{
		//在这个例子中, 使用cookie来记住该重定向去example1还是example2指向的网站.
		HttpCookie cookie;

		string cdnr=Request.QueryString["cdnredirect"];
		if (!string.IsNullOrEmpty(cdnr))
		{
			cookie = new HttpCookie("cdnredirect", cdnr);
			cookie.Path = "/";
			cookie.HttpOnly = true;
			Response.Cookies.Add(cookie);
		}
		else
		{
			//为了让例子的首页总是能运行, 所以判断如果为首页, 则返回null, 即是不做重定向, 使用本站的aspx和资源
			if (Request.Path == "/" || Request.Path.Equals("/default.aspx", StringComparison.OrdinalIgnoreCase))
				return null;
			//尝试寻找cookie
			cookie = Request.Cookies["cdnredirect"];
			if (cookie != null)
				cdnr = cookie.Value;
		}

		//如果识别出要重定向example1的话
		if (cdnr == "example1")
		{
			//websiteid主要是用来区分缓存和其它类型的共享资源
			long websiteid = 1;

			//设定要重定向的网址. 这里使用原网址. 开发者是可以自行对网址进行修改的.
			string newpathquery = this.Request.Url.PathAndQuery;

			//HOST头是指要向目标服务器获取哪个网站的内容. 这和服务器本身的域名并不需要对应.
			string newhostheader = "homehttp.com";

			//这里指定的是服务器的名字或IP. 如果域名本身没有指向到服务器, 那么就需要指定为ip
			//注意, 这里一直都是处于可编程的状态, 开发者可以根据当前请求的COOKIES之类的信息, 去指派不同的服务器来达到分流的目的.
			string servername = "homehttp.com";
			int serverport = 80;

			Uri uri = new Uri("http://" + newhostheader + newpathquery);

			return new aspnetcdn.WebsiteRequest(websiteid, uri, servername, serverport);
		}

		//example2同理, 就不做解释.
		if (cdnr == "example2")
		{
			long websiteid = 2;
			string newpathquery = this.Request.Url.PathAndQuery;
			string newhostheader = "forums.asp.net";
			string servername = "forums.asp.net";
			int serverport = 80;
			Uri uri = new Uri("http://" + newhostheader + newpathquery);
			return new aspnetcdn.WebsiteRequest(websiteid, uri, servername, serverport);
		}

		//当这个函数返回null的时候, 就表示希望当前网站的内容被执行了. 
		//也就是说, 如果上面从来不返回任何WebsiteRequest实例, 那么aspnetcdn就不起效果, 网站就和普通的ASP.NET一样运行.
		return null;
	}



}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值