我创建了Global.asax文件并将其放入我的Web应用程序中,该应用程序适用于SharePoint 2013。 在Global.asax.cs文件中,我继承了SPHttpApplication类并重写 BeginRequest事件。它不起作用,SharePoint忽略Global.asax文件,或者我想念其他要添加的内容。 目标是在会话到期时创建重定向。我究竟做错了什么? 这是我的代码背后的代码:
namespace PhoenixHR.Global
{
public class PhenixHRHttpApplication : SPHttpApplication
{
public override void Init()
{
try
{
base.Init();
this.BeginRequest += new EventHandler(Moj_BeginRequest);
}
catch (Exception ex)
{
}
}
private void Moj_BeginRequest(object sender, EventArgs e)
{
try
{
if (HttpContext.Current.Session["TPL"] == null)
Response.Redirect("~/PhoenixHR/start.aspx");
}
catch (Exception ex)
{
}
}
}
}
Global.asax中
<%@ Assembly Name="Microsoft.SharePoint"%>
<%@ Application Language="C#" Inherits="PhoenixHR.Global.PhenixHRHttpApplication,PhoenixHR.Global,Version=1.0.0.0,Culture=neutral,PublicKeyToken=a0bd8fabe3543dc0" %>
答案 0 :(得分:0)
由于您的代码吞咽有异常可以证明更改无效吗?或者它是否每次请求都会引发异常并忽略它?
结合不同的事件你会更好。 HttpApplication类有很多可以绑定的事件,而BeginRequest在处理请求管道时非常早(第一次)。这将无法访问会话状态。我建议使用AcquireRequestState或PostAcquireRequestState。
为了使其工作,您需要创建一个HttpModule。
namespace PhoenixHR.Global
{
public class SessionMissingRedirectHttpModule : IHttpModule
{
private const string LAYOUTS_SUBFOLDER = "/PhoenixHR.Global";
private const string START_PAGE = "/start.aspx";
public void Dispose()
{
}
public void Init(HttpApplication context)
{
context.PostAcquireRequestState += context_PostAcquireRequestState;
}
void context_PostAcquireRequestState(object sender, EventArgs e)
{
// get required contexts
SPHttpApplication application = (SPHttpApplication)sender;
HttpContext context = application.Context;
HttpSessionState session = context.Session;
if (session == null)
return;
if (session["TPL"] != null)
return;
// get SharePoint context and current SPWeb.
SPContext sharepointContext = SPContext.GetContext(context);
SPWeb currentWeb = sharepointContext.Web;
// build a url to the redirect page.
string layoutsFolder =
SPUtility.GetLayoutsFolder(currentWeb);
string url = string.Format("{0}/{1}{2}{3}", currentWeb.Url, layoutsFolder, LAYOUTS_SUBFOLDER, START_PAGE);
// prevent redirection loop
if (context.Request.Url.AbsoluteUri.Equals(url, StringComparison.InvariantCultureIgnoreCase))
return;
SPUtility.Redirect(url, SPRedirectFlags.Trusted, context);
}
}
}
要注册HttpModule,您需要编辑将在其中运行的Web应用程序的web.config。
在/Configuration/system.webServer/modules路径中添加以下内容
<add name="SessionMissingRedirectHttpModule" type="PhoenixHR.Global.SessionMissingRedirectHttpModule, PhoenixHR.Global,Version=1.0.0.0,Culture=neutral,PublicKeyToken=a0bd8fabe3543dc0" />
对于所需应用程序页面的路径有一些最好的猜测,因此您可能需要更改变量以适应。