在dotnetnuke中使用IP的响应重定向

时间:2016-11-07 13:35:17

标签: redirect dotnetnuke dotnetnuke-module web-user-controls dotnetnuke-settings

我在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方法?

2 个答案:

答案 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 OverviewHow To Create an ASP.NET HTTP Module