Asp.net MVC и портал, как функциональность - PullRequest
4 голосов
/ 26 мая 2010

FHI,

Мне нужно создать сайт с некоторыми функциями, подобными порталу, где параметр в запросе будет идентифицировать портал. вот так http: / domain / controller / action / portal

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

У меня сейчас что-то работает, но я чувствую, что должно быть центральное место в конвейере, чтобы справиться с этим. Мое текущее решение использует фильтр настраиваемых действий, который проверяет параметры портала и проверяет, существует ли портал, и проверяет, вошел ли пользователь на этот портал (портал, для которого вошел пользователь, находится в файле cookie аутентификации). Я делаю свои собственные IIndentiy и IPrincipal в событии application_postauthentication.

У меня 2 проблемы с моим текущим подходом:

1: В действительности это не применяется, я должен добавить атрибуты ко всем контроллерам и / или действиям.

2: аутентификация пользователя на самом деле не работает, я бы хотел, чтобы это работало. Но для этого мне нужно иметь доступ к параметрам маршрута, когда я создаю свой IPrincipal / IIndenty, и я не могу найти правильное место для этого.

Надеюсь, кто-нибудь подскажет, Ричард.

Ответы [ 3 ]

1 голос
/ 06 июня 2010

Есть несколько разных способов сделать это (как всегда ...). Если вы хотите сделать это в контроллере (или через атрибут), но вы также хотите сделать это глобально, тогда вы всегда можете использовать собственный базовый класс контроллера и применять там логику. Действие actionfilterattribute передается по наследству, а Боб - твой дядя.

С другой стороны, это на самом деле кажется мне проблемой маршрутизации. Поэтому я бы, вероятно, подумал о создании собственного маршрута для обработки того, что вы делаете. Если вы сделаете это, то после того, как вы запустите его, вы захотите проверить его под нагрузкой, чтобы убедиться, что у вас есть хорошая стратегия кэширования (так что каждый запрос не является поиском по базе данных для маршрута + другой за то, что происходит в контроллере).

0 голосов
/ 25 августа 2010

Для отсутствующего перенаправления портала я бы обработал это при маршрутизации.Если у вас относительно небольшое количество порталов, вы можете сделать это, создав уникальный маршрут для каждого из ваших контроллеров, а затем задав маршрут по умолчанию для перенаправления.Маршруты оцениваются в порядке их создания, поэтому просто поместите маршрут по умолчанию внизу.Ваша регистрация маршрута будет выглядеть примерно так:

routes.MapRoute(
        "Portal1",
        "{controller}/{action}/FirstPortal",
        new {controller = "defaultController", action = "defaultAction", 
             portal = "FirstPortal"}
    );

routes.MapRoute(
        "Portal2",
        "{controller}/{action}/SecondPortal",
        new {controller = "defaultController", action = "defaultAction", 
             portal = "SecondPortal"}
    );

routes.MapRoute(
        "Default",
        "{controller}/{action}",
        new {controller = "defaultController", action = "defaultAction", 
             portal = "Default"}
    );

Таким образом, вы можете использовать значение маршрута «portal» для выбора портала, и любой запрос, который не совпадает, будет перенаправлен на указанный контроллер / действиев вашем маршруте по умолчанию, который может позаботиться о перенаправлении пользователя соответствующим образом.

0 голосов
/ 26 мая 2010

Вы можете применить авторизацию пользователя через атрибут в контроллере. Вы примените это к каждому действию (как получить, так и опубликовать). Я думаю, что было бы разумно добавить какую-то проверку для каждого действия в контроллере для написания безопасного кода, пожалуйста, исправьте меня, если я ошибаюсь.

...