Mvc _layout Request.IsAuthenticated

时间:2015-03-13 10:24:39

标签: c# asp.net-mvc-4

我不知道我在问一个有效的问题。我正在开发MVC Web应用程序。在这里,我有Home/Index方法。当我运行该网站时,它会在url中显示http://localhost:25537/,指向Home/Index方法。在Index页面上,我展示了一些横幅和其他一些内容。当我当时登录我的网站时,我想要转到相同的网页,即http://localhost:25537/,指向Home/Index,但内容应该更改。

这是我的routeconfig

 routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Account", action = "Index", id = UrlParameter.Optional }
        );

如何实施此类view?如何路由到同一页面但内容应该更改?

如果我在Request.IsAuthenticate页面中使用Index,则会在登录后显示。但我有一个疑问。此Home/index定义为[AllowAnonymous],但登录后应为[Authorize]

2 个答案:

答案 0 :(得分:2)

  

如果我在“索引”页面中使用Request.IsAuthenticate,则会在登录后显示。

这就是你如何做到的。在您的视图中,您可以将经过身份验证的内容包装在检查中。类似的东西:

<div>
    public content
</div>
@if (Request.IsAuthenticated)
{
    <div>
        authenticated-only content
    </div>
}

当且仅当提出请求的用户经过身份验证时,该内容才会传递给客户端。

  

此主页/索引定义为[AllowAnonymous]但登录后应为[Authorize]

不,不应该。索引操作仍允许匿名访问。它返回的视图只包含一些不为匿名用户显示的部分。但是这些用户仍然可以请求操作本身。

答案 1 :(得分:0)

如果您的控制器操作使用[Authorize]属性修饰,则无关紧要。该属性仅检查是否允许您在不登录的情况下查看页面。

因此,在您看来,您只需使用:

@if(Request.IsAuthenticated){
    // some Stuff you want to show if the user has logged in
}