⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 customredirectutility.cs

📁 ASP开发网站的 关于网站的设计和说明 还有SQL的程序 数据库
💻 CS
字号:

namespace ASPNET.StarterKit.Communities
{
	using System;
	using System.Web;
	using System.Collections;
	using System.Data;
	using System.Data.SqlClient;

	/// <summary>
	/// Summary description for CustomRedirectUtility.
	/// </summary>
	public class CustomRedirectUtility
	{
		public static void EditRedirect(CustomRedirectInfo ChangeRedirect)
		{
			SqlConnection conPortal = new SqlConnection( CommunityGlobals.ConnectionString );
			SqlCommand cmdEdit = new SqlCommand( "Community_Custom_AdminEditRedirect", conPortal );
			cmdEdit.CommandType = CommandType.StoredProcedure;
            
			cmdEdit.Parameters.Add("@communityID",CommunityGlobals.CommunityID);
			cmdEdit.Parameters.Add("@sourceURL", ChangeRedirect.SourceURL );
			cmdEdit.Parameters.Add("@destinationURL", ChangeRedirect.DestinationURL );
			cmdEdit.Parameters.Add("@isSection", ChangeRedirect.IsSectionRedirect );

			conPortal.Open();
			cmdEdit.ExecuteNonQuery();
			conPortal.Close();

			CustomRedirectUtility.ClearCache();
		}

		public static bool AddRedirect(CustomRedirectInfo NewRedirect)
		{
			SqlConnection conPortal = new SqlConnection( CommunityGlobals.ConnectionString );
			SqlCommand cmdAdd = new SqlCommand( "Community_Custom_AdminAddRedirect", conPortal );
			cmdAdd.CommandType = CommandType.StoredProcedure;
            
			cmdAdd.Parameters.Add("@RETURN_VALUE", SqlDbType.Bit).Direction = ParameterDirection.ReturnValue;
			cmdAdd.Parameters.Add("@communityID",CommunityGlobals.CommunityID);
			cmdAdd.Parameters.Add("@sourceURL", NewRedirect.SourceURL );
			cmdAdd.Parameters.Add("@destinationURL", NewRedirect.DestinationURL);
			cmdAdd.Parameters.Add("@isSection", NewRedirect.IsSectionRedirect);

			conPortal.Open();
			cmdAdd.ExecuteNonQuery();
			bool success = Convert.ToBoolean(cmdAdd.Parameters["@RETURN_VALUE"].Value);
			conPortal.Close();

			if(success)
			{
				CustomRedirectUtility.ClearCache();
			}
			return success;
		}

		public static void DeleteRedirect(string sourceURL)
		{
		
			SqlConnection conPortal = new SqlConnection( CommunityGlobals.ConnectionString );
			SqlCommand cmdDelete = new SqlCommand( "Community_Custom_AdminDeleteRedirect", conPortal );
			cmdDelete.CommandType = CommandType.StoredProcedure;
            
			cmdDelete.Parameters.Add("@communityID",CommunityGlobals.CommunityID);
			cmdDelete.Parameters.Add("@sourceURL", sourceURL );
			conPortal.Open();
			cmdDelete.ExecuteNonQuery();
			conPortal.Close();

			CustomRedirectUtility.ClearCache();

		}

		public static void ClearCache() 
		{
			HttpContext.Current.Cache.Remove( CommunityGlobals.CacheKey(CommunityGlobals.CommunityName + "_CustomRedirects") );
		}
		
		/// <summary>
		/// Gets redirection ArrayList from cache if present, otherwise fetches from database
		/// </summary>
		/// <returns>ArryList containing CustomRedirectInfo instances for all redirects in community.</returns>
		public static System.Collections.ArrayList GetCustomRedirects()
		{
			HttpContext Context = HttpContext.Current;
			ArrayList CustomRedirects = (ArrayList)Context.Cache[CommunityGlobals.CacheKey(CommunityGlobals.CommunityName + "_CustomRedirects")];
			if (CustomRedirects == null) 
			{
				CustomRedirects = GetCustomRedirectsFromDB();
				Context.Cache.Insert
				(
					CommunityGlobals.CacheKey(CommunityGlobals.CommunityName + "_CustomRedirects"),
					CustomRedirects,
					null,
					DateTime.Now.AddMinutes(60), 
					System.Web.Caching.Cache.NoSlidingExpiration
				);
			}
			return CustomRedirects;
		}

		/// <summary>
		/// Fetches the redirect information from database and returns them in an arrayList.
		/// </summary>
		/// <returns>ArryList containing CustomRedirectInfo instances for all redirects in community.</returns>
		public static ArrayList GetCustomRedirectsFromDB()
		{
			ArrayList RedirectsList = new ArrayList();
			SqlConnection conPortal = new SqlConnection(CommunityGlobals.ConnectionString);
			SqlCommand cmd = new SqlCommand("Community_Custom_RedirectGetRedirectsForCommunity", conPortal);
			cmd.CommandType = CommandType.StoredProcedure;

			cmd.Parameters.Add("@communityID", CommunityGlobals.CommunityID);

			conPortal.Open();
			SqlDataReader dr = cmd.ExecuteReader();
			while (dr.Read())
				RedirectsList.Add(new CustomRedirectInfo(dr));
			conPortal.Close();
			
			return RedirectsList;
		}

		/// <summary>
		/// Calculates the supplied requestPath to determine if it should be redirected
		/// </summary>
		/// <param name="requestPath">The requested path</param>
		/// <returns>null if no redirection found, string URL of destination redirect otherwise.</returns>
		public static string CalculateRedirects(string requestPath)
		{
			string redirectURL = null;
			string requestPage = CommunityGlobals.GetPageName(requestPath);
			string destPage;
			string sourcePage;
			string requestSection = requestPath.Replace(requestPage,"") + "/";
			ArrayList RedirectList = GetCustomRedirects();

			RedirectList.Sort(); //puts the page targeted items first.
			
			foreach(CustomRedirectInfo ri in RedirectList)
			{
				sourcePage = CommunityGlobals.ResolveBase(ri.SourceURL);
				destPage = CommunityGlobals.GetPageName(CommunityGlobals.ResolveBase(ri.DestinationURL));
				//page targets
				if(sourcePage.ToLower() == requestPath.ToLower())
				{
					if(ri.DestinationURL.ToLower().StartsWith("http://"))
					{
						redirectURL = ri.DestinationURL;
					}
					else
					{
						redirectURL = CommunityGlobals.ResolveBase(ri.DestinationURL).Replace(requestPage,destPage);
					}
					break;
				} 
				//section targets
				if(sourcePage.ToLower() == requestSection.ToLower())
				{
					if(ri.DestinationURL.ToLower().StartsWith("http://"))
					{
						if(ri.DestinationURL.ToLower().EndsWith("/"))
						{
							redirectURL = ri.DestinationURL + requestPage.Substring(1,requestPage.Length - 1);
						}
						else
						{
							redirectURL = ri.DestinationURL;
						}
						
					}
					else
					{
						if(ri.DestinationURL.ToLower().EndsWith("/"))
						{
							redirectURL = CommunityGlobals.ResolveBase(ri.DestinationURL) + requestPage.Substring(1,requestPage.Length - 1);
						}
						else
						{
							redirectURL = CommunityGlobals.ResolveBase(ri.DestinationURL);
						}
					}
					break;
				} 
			}
			return redirectURL;
		}

		public static CustomRedirectInfo GetRedirectBySourceUrl(string sourceUrl)
		{
			ArrayList RedirectList = GetCustomRedirects();
			foreach(CustomRedirectInfo ri in RedirectList)
			{
				if(ri.SourceURL.ToLower() == sourceUrl.ToLower())
				{
					return ri;
				}
			}
			return null;
		}

	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -