在asp.net mvc中显示基于身份验证状态的视图

Ath*_*hul 2 c# asp.net asp.net-mvc asp.net-mvc-5 asp.net-identity

如果用户已登录,我想显示我的部门视图,如果未登录则要显示登录页面.我在我的内心尝试过类似的东西RouteConfig

  public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
          if (HttpContext.Current.User==null)
        {
            routes.MapRoute(
              name: "Default",
              url: "{controller}/{action}/{id}",
              defaults: new { controller = "Account", action = "Login", id = UrlParameter.Optional }
                );
        }
        else
        {
            routes.MapRoute(
             name: "Default",
             url: "{controller}/{action}/{id}",
             defaults: new { controller = "Department", action = "Index", id = UrlParameter.Optional }
               );
        }

    }
Run Code Online (Sandbox Code Playgroud)

但这个人总是在启动时加载登录页面.任何人都可以指出我在这里做错了什么?注意:我正在为此应用程序使用Asp.net Identity

Ale*_*lex 5

你的HttpContext.Current.User==null逻辑将进入控制器,而不是你的路线注册

注意 - 正确的电话是 Request.IsAuthenticated

假设你有一个这样的动作方法:

public ViewResult Index()
{
  if(Request.IsAuthenticated)
    return new RedirectResult("toLoginPage")
  else
    return new View("loggedInView");
}
Run Code Online (Sandbox Code Playgroud)

但是,我相信[Authorize]属性可能是您在用例中所需的属性:( 注意 - 重新阅读问题,这可能不准确,因为您希望根据登录状态返回不同的视图)

[Authorize]
public ViewResult ShowPerson(int id)
{
    return new View("loggedInView");
}
Run Code Online (Sandbox Code Playgroud)

在你的web.config中,类似于

<system.web>
<authentication mode="Forms">
  <forms loginUrl="~/Account/Login" />
</authentication>
</system.web>
Run Code Online (Sandbox Code Playgroud)

在此特定实例中,使用[Authorize]action方法上方的属性,如果用户未登录,则会将其重定向到登录状态.