如果用户访问网络中的某组网页,我需要将用户重定向到其他网页。有一个条件:我不允许触摸IIS。我已经google了一下,发现了一个名为WSS 3.0的自定义HttpHandler的东西。这听起来像我可以用来捕获用户输入的URL(最恶意的方式来访问应该真正被重定向的页面)并将它们重定向到另一个页面/ web。但是还没有机会使用它,我想知道我是否在正确的轨道上使用自定义HttpHandler使用C#将用户重定向到Sharepoint中的不同页面?
非常感谢。
答案 0 :(得分:3)
HttpHandler
来“处理”不同的文档类型,例如,您有单独的.asmx
句柄,.aspx
处理程序,.ascx
处理程序等。< / p>
只要您想将用户定向到其他页面,就可以使用SPUtility.Redirect方法。例如,您可以创建一个确定用户角色成员身份的登录页面,并根据该信息将其重定向到适当的页面。或者,根据用户浏览器发出的查询字符串的内容,您可以将它们重定向到可以处理查询字符串的页面,例如搜索中心结果页面。
或者,您可以查看Using Disposable Windows SharePoint Services Objects。
<强> - 编辑 - 强>
这是对你的评论的回应;你在思考正确的方向
Redirect()
如果你喜欢这个网址,否则就是。但是为了让你的Custom HttpHandler工作,应首先调用它 - 所以在配置文件中你必须提供path
中的值。通常在这里添加扩展名。但您可以使用*
替换它以适用于所有请求。我相信这会奏效。
<httpHandlers>
<add verb="*" path="*.aspx" type="MyNameSpace.MyHttpHandler, MyAssemblyName" />
</httpHandlers>
<强> - 编辑 - 强>
这是对你的评论的回应。假设您已“访问”页面以便您可以在其中编写javascript,则可以按照以下方式使用javascript。
<script language=JavaScript>
function RedirectIfUnAuthorized()
{
//Get the location of the current page.
var currentUrl = new String( document.location.href )
//See if it belongs to the urls you are looking for; redirect if so.
if (currentUrl == "http://www.thisUrl.com/page1.aspx") {Response.Redirect("http://www.GOOGLE.com")}
if (currentUrl == "http://www.thisUrl.com/page2.aspx") {Response.Redirect("http://www.BING.com")}
if (currentUrl == "http://www.thisUrl.com/page3.aspx") {Response.Redirect("http://www.someother.com")}
}
</script>
您可以在页面的OnLoad
活动中调用上述javascript。
答案 1 :(得分:1)
您是否可以在服务器上部署代码?或者那也是感人的IIS?
(SharePoint也会对web.config进行更改。如果您允许部署代码,那么您也可以。如果您不告诉管理员,他们可能甚至不会注意到。)
您可以通过SPWebConfigModification“部署”您的web.config更改,并以此方式部署任何web.config重定向或httphandler。
答案 2 :(得分:0)
HTTP处理程序是终点 ASP.NET管道中的对象和 HTTP处理程序基本上处理 请求并生成响应。对于 例如,ASP.NET页面是一个HTTP 处理程序。
HTTP模块也是对象 参与管道,但他们的工作 在HTTP Handler之前和之后 它的工作,并产生额外的 管道内的服务(for 关联会话的示例 HTTP处理程序执行前的请求, 然后保存会话状态 HTTP处理程序完成了它的工作,是 基本上由HTTP模块完成, SessionStateModule)
在您的情况下,HTTPModule将需要重定向另一个网页。
using System;
using System.Web;
using System.Web.UI;
using System.Configuration;
using Microsoft.Practices.EnterpriseLibrary.Data;
using System.Data;
namespace CustomHttpModule
{
public class HttpModuleImplementation : IHttpModule
{
#region IHttpModule Members
public void Dispose()
{
}
public void Init(HttpApplication context)
{
if (context == null)
throw new ArgumentNullException("Context == null");
context.AuthorizeRequest += new EventHandler(this.ProcessRequestHandler);
}
#endregion
private void DummpRequest(object sender, EventArgs e)
{
}
//first check that user.identity record exist in database
//If not then forward user to User registration page
private void ProcessRequestHandler(object sender, EventArgs e)
{
try
{
HttpApplication context = (HttpApplication)sender;
string strAbsoluteUri = context.Request.Url.AbsoluteUri.ToLower();
//check if request is accessing aspx page
if (strAbsoluteUri.Substring(strAbsoluteUri.Length - 5, 5).Contains(".aspx"))
{
string userName = context.User.Identity.Name;
//replace Test Module with DB call to validate user data
if (!CheckUserInDb(userName))
{
if (!strAbsoluteUri.Contains("mypage.aspx"))
redirectToRegistrationPage(context);
}
}
}
catch (Exception ex)
{
}
}
private void redirectToRegistrationPage(HttpApplication context)
{
context.Response.Redirect("http://" + context.Request.ServerVariables["HTTP_HOST"].ToString() + "Regpage.aspx", false);
}
private bool CheckUserInDb(string userName)
{
return true;
}
}
}
在SharePoint虚拟目录web.config文件中,您必须在httpModules:
部分下输入以下条目<add name="CustomHttpModule" type="CustomHttpModule.HttpModuleImplementation, CustomHttpModule" />