在 dotnetnuke 中使用 IP 进行响应重定向

Response redirect using IP in dotnetnuke

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

DNN 确实有一个主机设置,可以允许或拒绝根据用户的 IP 地址登录的用户的访问权限。它位于主机设置 > 高级设置 > 登录 IP 过滤器中。我不认为这会给你想要的结果。

我不建议创建模块。将它复制到所有页面并确保将一个实例添加到每个页面可能很困难。

相反,我会创建一个皮肤(主题)令牌。为此,创建一个简单的 class 库项目。创建一个 .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
        }
    }
}

然后,在您的 theme/skin ascx 页面中,包括以下内容:

<%@ Register TagPrefix="myco" TagName="IPREDIRECT" Src="~/DesktopModules/MyCompany/IpRedirect/IpRedirect.ascx" %>

<myco:IPREDIRECT ID="pageRedirect" runat="server" />

这将确保此功能将在站点中使用 skin/theme.

的所有页面上执行

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

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

查看此站点: HTTP Handlers and HTTP Modules OverviewHow To Create an ASP.NET HTTP Module