?? customredirectutility.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 + -