Наличие разных страниц входа для разных областей ASP.NET MVC 3 - PullRequest
20 голосов
/ 06 мая 2011

Могу ли я иметь разные URL для входа в разные области ASP .NET MVC3?

например. Я хотел бы иметь разные страницы входа для администраторов и операторов ввода данных.

Я вижу web.config в каждой области просмотра области, и я попытался сделать:

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

но это не очень хорошо.

Приветствие.

Ответы [ 2 ]

28 голосов
/ 06 мая 2011

Мне не известно, что .NET обрабатывает это для вас, но вы можете создать собственный AuthorizationAttribute

public class CustomAuthorization : AuthorizeAttribute {

  public string Url { get; set; }

  public override void OnAuthorization(AuthorizationContext filterContext) {

    if (!filterContext.HttpContext.User.Identity.IsAuthenticated) {
      filterContext.HttpContext.Response.Redirect(Url);
    }
    base.OnAuthorization(filterContext);

  }

}

Добавьте это к вашим контроллерам / действиям

[CustomAuthorization(Url="/Area/Login")]
public class HomeController {
  //...
}
9 голосов
/ 27 сентября 2013

Мое решение было основано на решении, представленном Дэвидом Гленном, спасибо.

public class CustomAuthorization : AuthorizeAttribute
{
    public string Url { get; set; }

    // redirect to login page with the original url as parameter.
    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        filterContext.Result = new RedirectResult(Url + "?returnUrl=" + filterContext.HttpContext.Request.Url.PathAndQuery);
    }
}

И добавьте Атрибут для ваших контроллеров / действий

[CustomAuthorization(Url="/Area/Login")]
public class HomeController {
  //...
}

Лучше используйте filterContext.Resultчем filterContext.HttpContext.Response.Redirect (Url) для перенаправления, поскольку текущий фильтр будет перенаправлен немедленно на страницу входа, в противном случае будет вызвано исходное действие, и только после этого он будет перенаправлен на страницу входа.

...