Asp.net 如果用户连接或未连接,则页面可访问。

Asp.net 如果用户连接或未连接,则页面可访问。,asp.net,asp.net-mvc-5,asp.net-identity,Asp.net,Asp.net Mvc 5,Asp.net Identity,我目前正在一个拥有MVC5和Identity的网站上工作 我有一个页面,当用户连接(使用帐户)时可以访问,但当用户未连接时也可以访问。如果他已连接,我想显示一些信息 如果他没有连接,我想显示较少的信息,我想邀请他登录 我不知道如何实现这样一个页面。我有一个控制器: [Authorize] public class PController : Controller { private int UserId; public ActionResu

我目前正在一个拥有MVC5和Identity的网站上工作

我有一个页面,当用户连接(使用帐户)时可以访问,但当用户未连接时也可以访问。如果他已连接,我想显示一些信息

如果他没有连接,我想显示较少的信息,我想邀请他登录

我不知道如何实现这样一个页面。我有一个控制器:

   [Authorize]
    public class PController : Controller
    {
        private int UserId;

        public ActionResult Index(int userId ) {
            UserId = Convert.ToInt32(((ClaimsIdentity) User.Identity).FindFirst("test").Value);
            PModel model = new PModel(UserId);
            return View(model);
        }
    }   
我的模型是:

公共类PModel{ public int UserId{get;set;}

public PModel(int userId) {

    ........
    }
在这两种情况下,我都希望调用Index方法,并根据模型中的连接进行处理:

  public PModel(int userId) {
      if(userConnected) {

         } else {

         }
  }

我不知道是否可以这样做。

在模型中不可以这样做(通常)。如果要使用ASP.net附带的默认表单身份验证模型,则需要在web.config中进行设置,并提供适当的登录/注销操作等。在配置中,您有如下内容:

<authentication mode="Forms">
   <forms loginUrl="~/Account/LogOn" timeout="30" name=".MySite" protection="All"/>       
</authentication>

如果用户未经身份验证,则操作中的
Authorize
属性将停止该方法中的代码运行。如果用户未登录而直接访问站点中的页面,则表单身份验证代码将用户重定向到web.config中指定的“loginUrl”



从您的评论中,我误读了您的问题。您需要删除
Authorize
属性,然后您可以根据
请求设置您的model
userConnected
属性。控制器中的IsAuthenticated
属性。

谢谢您的回答。我不想直接重定向用户。他即使用户未通过身份验证,也可以查看我的页面;只是页面中的信息会有所不同。我只需要一个页面,但根据用户是否通过身份验证,页面内容会有所不同。