Аутентифицировать пользователя из библиотеки классов c # - MVC - PullRequest
1 голос
/ 05 сентября 2011

Не уверен, что это возможно, но здесь мы идем:

Наш веб-сайт MVC в настоящее время переработан. Ранее у нас была кнопка Вход в систему в качестве изображения, и если пользователь прошел аутентификацию, кнопка выхода из системы отображалась. Вот так:

<%
    if (Request.IsAuthenticated)
    {
%>
<a href="/Account/LogOff">
    <img src="/images/logout.png" alt="logout" border="0" />
</a>
<%
    }
    else
    {
%>
<a href="<%: Url.Action("LogOn","Account")%>">
    <img src="/Images/login.png" alt="Log On" border="0" />
</a>
<%
    }
%>

Однако, как сайт был разработан, кнопка входа теперь включена в меню навигации. Поскольку у нас есть несколько областей на сайте, мы используем класс метода c # из класса Helper для генерации меню из карты сайта, например:

public static string TabbedMenu(this HtmlHelper html, string area)
{
    // Get all the current information.
    //
    RouteData route = html.ViewContext.RequestContext.RouteData;
    string controller = route.GetRequiredString("controller");
    string action = route.GetRequiredString("action");

    StringBuilder menuWrapper = new StringBuilder();
    menuWrapper.Append("<ul id=\"main-nav\" class=\"nav fl\">");

    // Using the sitemap, build a tabbed menu.
    //
    foreach (SiteMapNode node in SiteMap.RootNode.ChildNodes)
    {
        if (node.Title == area)
        {
            foreach (SiteMapNode node2 in node.ChildNodes)
            {
                if (node2["controller"].ToLower() == controller.ToLower())
                {
                    menuWrapper.Append("<li class=\"menu-item current-menu-item\">");
                }
                else
                {
                    menuWrapper.Append("<li class=\"menu-item\">");
                }

                RouteValueDictionary values = new RouteValueDictionary(new { Action = node2["action"], Controller = node2["controller"], Area = node2["area"] });
                VirtualPathData vpd = RouteTable.Routes.GetVirtualPathForArea(html.ViewContext.RequestContext, values);
                string target = vpd.VirtualPath;

                menuWrapper.AppendFormat("<a href=\"{0}\">{1}</a>", target, node2.Title);

                menuWrapper.Append("</li>");
            }
            break;
        }
    }


    menuWrapper.Append("<li id=\"menu-item-143\" class=\"login menu-item menu-item-type-custom menu-item-object-custom menu-item-143\"><a href=\"#\">Login</a></li>");
    menuWrapper.Append("<li id=\"menu-item-333\" class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-333\"><a href=\"#\">Sign up</a></li>");

    menuWrapper.Append("</ul>");

    return menuWrapper.ToString();
}

Итак, мой вопрос на самом деле: есть ли способ аутентифицировать пользователя из этого вспомогательного метода?

Любая помощь будет оценена,

Спасибо!

Ответы [ 2 ]

3 голосов
/ 05 сентября 2011

В вашем проекте библиотеки классов добавьте ссылку на System.Web.dll, которая позволит вам получить доступ к HttpRequest следующим образом:

System.Web.HttpContext.Current.Request.IsAuthenticated
3 голосов
/ 05 сентября 2011

Можете ли вы добавить новый параметр для этой функции:

public static string TabbedMenu(this HtmlHelper html, string area, bool IsAuthenticated)
{
     ...
     if(IsAuthenticated)
         print something...
     else
         print something else...
     ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...