【问题标题】:ASP.NET MVC - Set different entry point to Web AplicationASP.NET MVC - 为 Web 应用程序设置不同的入口点
【发布时间】:2013-12-01 16:04:16
【问题描述】:

我正在开发一个 ASP.Net MVC 网站,其预期的路由行为类似于 Facebook

当用户未登录并访问该站点时,他会在下面显示欢迎页面 www.domain.com/

如果他登录,我们希望他访问网站内容仍在 www.domain.com/

我应该如何定义路线?

编辑:按照说明进行更多说明

如果用户登录,我想提供不同的索引操作,如果他没有登录,则提供不同的操作。

一种行不通的方法

[Authorize]
public ActionResult Index()
{
  return View();
}

[AllowAnonymous]
public ActionResult Index()
{
 return View();
}

所以使用两个不同的索引操作默认路由

routes.MapRoute("Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional }

会按照我的意愿执行。

【问题讨论】:

  • 你不需要定义路由;这是一个控制器问题。路线将是相同的。您正在寻找 [Authorized] 属性或希望使用 IPrincipal 并基于它执行一些工作流。 addisagile.wordpress.com/2012/12/09/…
  • 我知道 [Authorized] 和 IPrincipal。像这样的问题代码无效 [Authorize] public ActionResult Index() { return View(); } [AllowAnonymous] public ActionResult Index() { return View();根据用户是否登录,我需要不同的索引操作
  • 该代码应该进入您的问题。看来您没有给我们足够的帮助。
  • 你不能有两个控制器动作命名相同的东西。您将不得不只允许每个人点击该控制器操作,然后在控制器操作内部进行处理以将所有未授权的人踢出 - 或者您需要创建自己的自定义授权属性,该属性源自 @ 987654327@ 并让它将未登录的人重定向到“您未登录”体验。
  • 我要做的是使用 Session...当用户登录时创建一个 Session.Like Session["sessionname"]=userName; then If(Session["sessionname"]==null){ return RedirectToActoin("yourAction")} else 返回你想要的操作

标签: asp.net-mvc asp.net-mvc-routing


【解决方案1】:

通过查看MSDN Documentation,我发现我可以在构造函数中传递我想要的视图的名称。为了完整起见,这里是我的实现。

public ActionResult Index()
    {
        if (User.Identity.IsAuthenticated)
        {
            return View();
        }
        else
        {
            return View("Welcome");
        }
    }

【讨论】:

    猜你喜欢
    • 2016-05-15
    • 2019-04-21
    • 2010-09-21
    • 2017-08-11
    • 2012-01-03
    • 2014-05-17
    • 1970-01-01
    • 2011-05-21
    • 2020-01-28
    相关资源
    最近更新 更多