Формы LoginUrl - как мне отформатировать это для работы с областью? - PullRequest
2 голосов
/ 03 февраля 2011

Я добавил Area в свой веб-проект, в котором я надеюсь выполнить все необходимые задачи аутентификации. Структура папок в проекте:

- Solution
  - Web Project
    - Areas
      - Accounts
        - Controllers
            AccountController.cs

В AccountController есть обычное LogOn(LogOnModel model, string returnUrl) Действие.

В AccountsAreaRegistration.cs есть автоматически сгенерированный маршрут:

context.MapRoute(
   "Accounts_default",
   "Accounts/{controller}/{action}/{id}",
   new { 
       action = "LogOn", 
       id= UrlParameter.Optional 
   }
);

Первое, что пришло мне в голову, - это просто добавить имя области к атрибуту loginUrl в web.config и позволить отображению маршрута позаботиться о перенаправлении - довольно просто, подумал я:

<forms loginUrl="~/Accounts/Account/LogOn"
       timeout="2880" />

Единственная проблема в том, что это не работает. Я получаю сообщение об ошибке «невозможно найти» / «Аккаунты / Аккаунт / Вход» - или какое-либо значение, которое я ввел в атрибут loginUrl. Мне кажется, что URL-адрес, указанный в Web.Config, не пропускает это значение таблица маршрутов для поиска совпадения.

* примечание: все это вызывается атрибутом [Authorize] для действия в одном из моих других контроллеров.

EDIT

Обходной путь, который я нашел, - оставить URL-адрес по умолчанию («Учетная запись / вход в систему») и добавить еще один маршрут в global.asax, чтобы перенаправить запрос в нужную область:

routes.MapRoute("LogOn",
                "Account/LogOn/{id}",
                new { controller = "Account", 
                      action = "LogOn", 
                      id = UrlParameter.Optional}
).DataTokens.Add("area", "Accounts");

Это выполняет работу, но я не знаю, является ли это лучшим решением проблемы.

Ответы [ 2 ]

0 голосов
/ 10 февраля 2011

Обходной путь, который я нашел, состоит в том, чтобы оставить URL-адрес по умолчанию («Учетная запись / Вход в систему») и добавить еще один маршрут в global.asax для перенаправления запроса в нужную область:

routes.MapRoute("LogOn",
            "Account/LogOn/{id}",
            new { controller = "Account", 
                  action = "LogOn", 
                  id = UrlParameter.Optional}
).DataTokens.Add("area", "Accounts");

Это выполняет работу, но я не знаю, является ли это лучшим решением проблемы.

0 голосов
/ 03 февраля 2011

Помечено ли тестируемое действие контроллера атрибутом [Authorize]?

Какая часть не работает, авторизация какого-либо действия или маршрутизация к действию входа в систему после запроса авторизованного действия?

...