响应重定向使用IP在dotnetnuke



我在我的DNN门户网站上托管和开发。我需要重定向用户使用客户端IP。我认为这项工作可能有两个想法。

1- DNN设置

也许DNN有设置,我可以为客户端IP地址设置特定的URL,并自动DNN重定向到特定的URL。

我读了很多主题,但我找不到合适的设置。

有办法做到这一点吗?

2- New Module

我有一个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);
}

但是我应该将此代码添加到使用客户端IP进行重定向的任何ascx中。这是不可能的,因为我可能没有源代码模块。

我想我应该创建一个新的模块。所以我可以把它添加到页面上。模块更改onload页面并使用客户端IP重定向到URL。

在这种情况下,我尝试创建新模块,但我不知道如何更改onload方法的每个页面添加模块到它?

你可以使用IHttpModule并创建一个包含你的类的新模块,然后你应该将你的IHttpModule添加到web。配置。例如

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

请看这个网站:HTTP处理程序和HTTP模块概述以及如何创建ASP。. NET HTTP Module

DNN确实有一个Host设置,允许或拒绝基于IP地址登录的用户访问。它在主机设置>高级设置>登录IP过滤器。我认为那不会给你想要的结果。

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

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

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

最新更新