在 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 Overview
和 How To Create an ASP.NET HTTP Module
我在我的 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 Overview 和 How To Create an ASP.NET HTTP Module