我在DNN门户网站上托管和开发人员。我需要使用客户端IP重定向用户。我认为这项工作可能有两个想法。
1- DNN设置
也许DNN有设置,我可以设置客户端IP地址的特定URL,并自动DNN重定向到特定的URL。
我阅读了很多主题,但我找不到设置。
有办法做到这一点吗?
2-新模块
我有ascx
onload
方法有此代码:
var IP = Server.HtmlEncode(Request.UserHostAddress).ToString();
using (Entities db = new Entities())
{
var retVal = db.URLAddresses.Where(u => u.IPAdress == IP).FirstOrDefault();
if (retVal != null)
Response.Redirect(retVal.URL);
}
但我应该将此代码添加到任何ascx以使用客户端IP进行重定向。这是不可能的,因为我可能没有源代码模块。
我想我应该创建新模块。所以我可以将它添加到页面。模块更改onload
页面并使用客户端IP重定向到URL。
在这种情况下,我尝试创建新模块,但我不知道如何将每个添加模块的页面更改为onload
方法?
答案 0 :(得分:1)
DNN确实有一个主机设置,允许或拒绝访问基于其IP地址登录的用户。它位于主机设置>高级设置>登录IP过滤器。我认为这不会给你想要的结果。
我不建议创建一个模块。将其复制到所有页面并确保将一个实例添加到每个页面可能很困难。
相反,我会创建一个皮肤(主题)标记。为此,请创建一个简单的类库项目。创建.ascx和ascx.cs文件。您可以将.ascx保留为空,因为您没有要添加到页面的任何html。在.cs中,输入如下内容:
namespace MyCompany.DNN.Skin
{
public partial class IpRedirect : SkinObjectBase
{
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
// Put your redirect logic here
}
}
}
然后,在您的主题/皮肤ascx页面中,包含以下内容:
<%@ Register TagPrefix="myco" TagName="IPREDIRECT" Src="~/DesktopModules/MyCompany/IpRedirect/IpRedirect.ascx" %>
<myco:IPREDIRECT ID="pageRedirect" runat="server" />
这将确保此功能将在使用皮肤/主题的站点中的所有页面上执行。
答案 1 :(得分:1)
您可以使用IHttpModule并创建一个包含您的类的新模块,然后您应该将您的IHttpModule添加到web.config。 例如
<add name="YourModule" type="YourAssembly, YourNameSpace" preCondition="managedHandler" />
查看此网站: HTTP Handlers and HTTP Modules Overview 和How To Create an ASP.NET HTTP Module