认证用户从c#类库- MVC

本文关键字:MVC 类库 用户 认证 | 更新日期: 2023-09-27 18:07:41

不确定这是否可能,但我们开始吧:

我们的MVC网站目前已经重新设计。以前,我们将Logon按钮作为一个图像,如果用户经过身份验证,将显示一个注销按钮。像这样:

<%
    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>
<%
    }
%>

然而,网站的设计方式,登录按钮现在被纳入导航菜单。由于站点中有多个区域,我们使用Helper类中的c#方法类从站点地图生成菜单,如下所示:

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();
}

所以我的问题是,有没有办法从这个助手方法中验证用户?

任何帮助都将不胜感激,

谢谢!

认证用户从c#类库- MVC

你能给这个函数添加新的参数吗?

public static string TabbedMenu(this HtmlHelper html, string area, bool IsAuthenticated)
{
     ...
     if(IsAuthenticated)
         print something...
     else
         print something else...
     ...
}

在你的类库项目中添加System.Web.dll的引用,允许你像这样访问HttpRequest:

System.Web.HttpContext.Current.Request.IsAuthenticated