From:
In case if you are interested in creating your own custom error page and custom access denied page instead of the out of the box MOSS / Sharepoint error page (generally the requirements in Publishing internet site). You can use the following HTTPModule (this is just a sample, you can change it to suit your requirements):
Note to have following Web.config Entries:
Following entries in the <appsettings> section in the web.config file:
- Following entry is for a custom error page to be displayed for anonymous users, the key should be in the format: “CustomAnonCustErrPG-SiteCollectionURL” as shown below:
<add key="CustomAnonCustErrPG-http://xyz.com" value="/Pages/default.aspx" />
- Following entry is for a custom error page to be displayed for authenticated users, the key should be in the format: “CustomAuthCustErrPG-SiteCollectionURL” as shown below:
<add key="CustomAuthCustErrPG-http:// xyz.com " value="/Pages/default.aspx" />
- Following entry is for a custom error page to be displayed for access denied errors, the key should be in the format: “CustomCustAcsDndPG -SiteCollectionURL” as shown below:
<add key="CustomCustAcsDndPG-http://xyz.com" value="//CustomErrPg.aspx " />
Create an entry on all the WFEs web-application specific web.config in the HTTPModules section, as follows just below the <HTTPModule> tag This should be the first entry in the HTTPModules section:
<add name="XYZExceptionHandler" type="XYZ.Sharepoint.HTTPModule.CustomErrorPages.CustomErrors, XYZ.Sharepoint.HTTPModule.CustomErrorPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=PUBLICKEYGUID" />
NOTE: Add your own Public key for PublicKeyToken per your snk used, replace the PUBLICKEYGUID with your own snk value
///
// This is a HTTPModule used for redirecting the user to Home or Home Anon site depending on whether
// s/he is authenticated or anonymous.
//
// The module checks if the url is accessdenied.aspx and redirects the user to proper url.
using System;
using System.Web;
using Microsoft.Practices.EnterpriseLibrary.ExceptionHandling;
using System.Configuration;
using Microsoft.SharePoint;
namespace XYZ.Sharepoint.HTTPModule.CustomErrorPages
{
public class CustomErrors : IHttpModule
{
#region -- Private fields --
private static AppSettingsReader m_Reader = new AppSettingsReader();
private static string m_SiteCollAnonCustomErrPG = "CustomAnonCustErrPG";
private static string m_SiteCollAuthCustomErrPG = "CustomAuthCustErrPG";
private static string m_SiteCollCustAcsDndPG = "CustomCustAcsDndPG";
#endregion
public void Init(HttpApplication context)
{
//Attaching event handlers for access denied and error respectively
//context.BeginRequest += new EventHandler(context_AcessDenied);
context.EndRequest += new EventHandler(context_AcessDenied);
context.Error += new EventHandler(context_Error);
}
void context_AcessDenied(object sender, EventArgs e)
{
try
{
HttpApplication httpApp = sender as HttpApplication;
HttpContext context = httpApp.Context;
string httpUrl = context.Request.Url.ToString();
string strCustomAcssDndURL = string.Empty;
string strSiteURL = string.Empty;
if (httpUrl.ToLower().Contains("/_layouts/accessdenied.aspx"))
{
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite site = new SPSite(httpUrl))
{
strSiteURL = site.Url;
}
});
HttpContext.Current.Server.ClearError();
HttpContext.Current.Response.Clear();
strCustomAcssDndURL = getAppSettingsValue(m_SiteCollCustAcsDndPG + "-" + strSiteURL);
HttpContext.Current.Response.Redirect(strCustomAcssDndURL, false);
}
}
catch (Exception ex)
{
//Do your exception handling
}
}
void context_Error(object sender, EventArgs e)
{
try
{
string strURL = string.Empty;
string strSiteURL = SPContext.Current.Site.Url;
Exception[] unhandledExceptions = HttpContext.Current.AllErrors;
//logging all the exceptions thru the Exception policy file
foreach (Exception ex in unhandledExceptions)
{
//Do your exception handling
}
HttpContext.Current.Server.ClearError();
HttpContext.Current.Response.Clear();
if (HttpContext.Current.User.Identity.IsAuthenticated)
{
strURL = getAppSettingsValue(m_SiteCollAuthCustomErrPG + "-" + strSiteURL);
HttpContext.Current.Response.Redirect(strURL, false);
}
else
{
strURL = getAppSettingsValue(m_SiteCollAnonCustomErrPG + "-" + strSiteURL);
HttpContext.Current.Response.Redirect(strURL, false);
}
}
catch (Exception ex)
{
//Do your exception handling
}
}
public void Dispose()
{
}
//Method used to read Appsettings value from web.config for the webapplication
private static string getAppSettingsValue(string sKey)
{
string sValue = null;
try
{
sValue = m_Reader.GetValue(sKey, typeof(string)) as string;
}
catch (Exception ex)
{
//Do your exception handling
}
return sValue;
}
}
}