Как заставить .NET WebForm Routing работать с авторизацией - PullRequest
2 голосов
/ 21 декабря 2010

У меня есть маршруты, которые регистрируются из базы данных на веб-сайте asp.net (не MVC). Маршруты регистрируются нормально, все они работают, когда я вошел в систему. Я пытаюсь создать целевую страницу на основе некоторых данных маршрута:

Страница - [сайт] / посадка / dell

Маршрут выглядит так: «посадка / {клиент}», и он направляет меня на мою страницу Login.aspx, там я вывожу клиента из маршрута, а затем отображаю некоторые пользовательские данные бренда на основе значения.

В моем файле web.config мой режим аутентификации настроен на формы с моим loginUrl = "Login.aspx"

Когда у пользователя нет куки-файла авторизации, он перенаправляет пользователя на:

[site] /Login.aspx?ReturnUrl=%2flanding%2fdell вместо сохранения URL-адреса маршрута и отображения правильных данных. Сервер IIS фактически даже не обрабатывает маршрут, просто отправляет пользователя на страницу Login.aspx.

Я попробовал несколько дополнений к моему web.config: <location path="landing"><system.web><authorization><allow users="*"/></auth></sys.web></loc> и т. Д., И много вариантов, но, похоже, ничего не работает.

Идеи у кого-нибудь? Я предполагаю, что это распространенная проблема, и она не очень хорошо задокументирована.

1 Ответ

1 голос
/ 22 декабря 2010

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

Несколько вещей, которые нужно запомнить, во-первых, это приложение не из MVC, чисто веб-формы.

В моем Global.ascx есть метод:

    void RegisterRoutes(RouteCollection routes)
    {
        routes.Add(new Route("{resource}.axd/{*pathInfo}", new StopRoutingHandler()));
        routes.Add(new Route("{service}.asmx/{*pathInfo}", new StopRoutingHandler()));
        routes.Add(new Route("*.psd/{*pathinfo}", new StopRoutingHandler()));
        routes.Add(new Route("*.js/{*pathinfo}", new StopRoutingHandler()));
        routes.Add(new Route("*.jpg/{*pathinfo}", new StopRoutingHandler()));
        routes.Add(new Route("*.gif/{*pathinfo}", new StopRoutingHandler()));
        routes.Add(new Route("{resource}.css/{*pathinfo}", new StopRoutingHandler()));

        routes.RouteExistingFiles = false;

        Data.DataContext context = new Data.DataContext();

        var AppRoutes = (from r in context.SomeRouteTable
                         select r).ToList();

        foreach (var AppRoute in AppRoutes)
        {
            routes.MapPageRoute(AppRoute.RouteName,
                                AppRoute.RouteUrl,
                                AppRoute.PhysicalFile, false);
            // The important part is the "false" above.  It is the 
            // CheckPhysicalUrlAccess parameter.
        }
    }

Теперь в файле web.config необходимо добавить запись:

<location path="landing"><system.web><authorization><allow users="*"/></authorization></system.web></location>

В пустом Application_Start внутри файла Global.asax просто вызовите функцию RegisterRoutes:

this.RegisterRoutes(RouteTable.Routes);

Перезагрузите сервер, и готово. Теперь ваш маршрут для страницы входа будет работать, однако все остальные ваши маршруты будут безопасными. Если вам нужно предоставить другой маршрут, все, что вам нужно сделать, это добавить базовый путь к вашему разделу авторизации system.web с помощью allow users = "*".

Еще одна вещь, которая, как мы надеемся, поможет другим, - это возможность извлекать из обработчика маршрута все ваши javascript (js), изображения (psd, jpg, gif), действительно любые статические файлы. По всему Интернету были объяснены .axd и .asmx, однако я никогда не мог найти способ сделать это игнорирующим для других статических типов файлов при работе с маршрутизацией в модели веб-форм.

Я надеюсь, что это поможет кому-то еще и сэкономит им время, которое я потратил на отслеживание всего этого и выполнение всего модульного тестирования самостоятельно.

Наслаждайтесь людьми.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...