Перенаправление ответа с использованием IP в dotnetnuke

Я хостинг и разработчик на моем портале DNN. Мне нужно перенаправить пользователей, используя клиентский IP. Я думаю, может быть две идеи для этой работы.

1 – Настройка DNN

Возможно, у DNN есть настройки для этого, чтобы я мог установить определенный URL-адрес для клиентских IP-адресов и автоматически перенаправлял 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 страницу и перенаправляет на URL-адрес, используя IP-адрес клиента.

В этом сценарии я пытаюсь создать новый модуль, но не знаю, как изменить метод onload для каждой страницы, к которой добавлен модуль?


person Ali Soltani    schedule 07.11.2016    source источник


Ответы (2)


Вы можете использовать IHttpModule и создать новый модуль для включения вашего класса, тогда вам следует добавить свой IHttpModule в web.config . Например,

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

См. эти сайты: Обзор обработчиков HTTP и модулей HTTP и Как создать HTTP-модуль ASP.NET

person taha mousavi    schedule 08.11.2016

DNN имеет параметр Host, который разрешает или запрещает доступ пользователям, входящим в систему, на основе их 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" />

Это гарантирует, что эта функция будет выполняться на всех страницах сайта, использующих скин/тему.

person DotNetNuclear    schedule 07.11.2016