Подтвердить что ты не робот

Различные LoginUrl для разных URL-адресов с ASP.NET MVC и аутентификацией форм

У меня есть проект ASP.NET MVC, и я хотел бы иметь другой LoginUrl для разных областей веб-сайта. В зависимости от области сайта вводятся различные типы учетных данных.

http://host.com/widget/home должен перенаправить пользователя на http://host.com/widget/logon.

http://host.com/admin/home должен перенаправить пользователя на http://host.com/admin/logon.

До сих пор лучшее решение, с которым я столкнулся, состоит в том, чтобы в файле web.config были созданы формы Auth loginUrl = "~/Account/Logon":

   <authentication mode="Forms">
      <forms loginUrl="~/Account/LogOn" timeout="2880"/>
   </authentication>

В контроллере для учетной записи:

public ActionResult LogOn()
{
   //redirect depending on the returnUrl?
   string returnUrl = ControllerContext.Controller.ValueProvider["ReturnUrl"].AttemptedValue;
   if (returnUrl.StartsWith("/widget"))
   {
       return Redirect(string.Format("/widget/Logon?ReturnUrl={0}", returnUrl));
   }
   if (returnUrl.StartsWith("/admin"))
   {
       return Redirect(string.Format("/admin/Logon?ReturnUrl={0}", returnUrl));
   }
   return View();
}

Есть ли лучший способ сделать это?

4b9b3361

Ответ 2

Я знаю, что вы можете иметь отдельные файлы web.config в подпапках веб-сайта, так что если бы у вас были фактические .aspx-страницы в папке admin/и web.config в этой папке, вы могли бы указать URL аутентификации в этой папке отдельно.

Я не уверен, что это работает с ASP.NET MVC-маршрутами, так как вы, вероятно, не будете иметь физические файлы в этих подпапках, но стоит попробовать.

Ответ 3

Добавьте к вашим действиям атрибут Authenticate.

Затем в global.asax добавьте Application_AuthenticateRequest, затем посмотрите на отправителя и перенаправите туда, где вы хотите, чтобы действие заходило в систему.