0

我在我的 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添加模块的每个页面的方法?

4

2 回答 2

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" />

这将确保此功能将在站点中使用皮肤/主题的所有页面上执行。

于 2016-11-07T22:32:56.227 回答
1

您可以使用 IHttpModule 并为包含您的课程创建一个新模块,然后您应该将 IHttpModule 添加到 web.config 。例如

      <add name="YourModule" type="YourAssembly, YourNameSpace" preCondition="managedHandler" />

请参阅此站点: HTTP 处理程序和 HTTP 模块概述 以及如何创建 ASP.NET HTTP 模块

于 2016-11-08T08:45:56.010 回答