Asp.net mvc asp.net mvc和类似门户的功能

Asp.net mvc asp.net mvc和类似门户的功能,asp.net-mvc,model-view-controller,asp.net-mvc-routing,Asp.net Mvc,Model View Controller,Asp.net Mvc Routing,fHi 我需要构建一个具有类似门户的功能的站点,其中请求中的参数将标识门户。类似http:/domain/controller/action/portal 现在我的问题是,如果一个门户不存在,则必须重定向到另一个站点/页面,用户可以登录到一个门户,但如果用户来到另一个门户,则必须将用户重定向回该门户的登录页面 我现在有些事情正在进行,但我觉得管道中必须有一个中心位置来处理这个问题。我当前的解决方案使用自定义操作筛选器,该筛选器检查门户参数,查看门户是否存在,并检查登录该门户的用户(用户登录的门户

fHi

我需要构建一个具有类似门户的功能的站点,其中请求中的参数将标识门户。类似http:/domain/controller/action/portal

现在我的问题是,如果一个门户不存在,则必须重定向到另一个站点/页面,用户可以登录到一个门户,但如果用户来到另一个门户,则必须将用户重定向回该门户的登录页面

我现在有些事情正在进行,但我觉得管道中必须有一个中心位置来处理这个问题。我当前的解决方案使用自定义操作筛选器,该筛选器检查门户参数,查看门户是否存在,并检查登录该门户的用户(用户登录的门户位于身份验证cookie中)。我在申请后认证活动中做出自己的身份和原则

我目前的方法有两个问题:

1:它不是真正强制的,我必须将属性添加到所有控制器和/或操作中

2:在用户上进行的isauthenticated没有真正起作用,我希望它能起作用。但为此,我需要在创建i原则/i属性时访问路由的参数,而我似乎找不到正确的位置来执行此操作

希望有人能给我一些建议,
Richard。

您可以通过控制器中的属性强制用户授权。您可以将此应用于每个操作(get和post)。我认为在控制器内的每个操作中添加某种验证来编写安全代码是合理的,如果我在这里出错,请纠正我。

有几种不同的方法可以做到这一点(一如既往……)。如果希望在控制器中(或通过属性)执行此操作,但也希望全局执行此操作,则始终可以使用自定义基本控制器类并在其中应用逻辑。actionfilterattribute是继承的,bob是你叔叔


另一方面,我觉得这真的是一个路由问题。所以我可能会考虑创建一个定制的路线来处理你正在做的事情。如果您这样做,那么一旦您让它工作起来,您将希望在负载下测试它,以确保您有一个好的缓存策略(这样每个请求都不是路由的db查找+控制器中发生的任何事情的另一个db查找)

对于丢失的门户重定向,我将在路由中处理它。如果入口数量相对较少,可以通过为每个控制器创建唯一的路由,然后为重定向设置默认路由来实现。管线将按照您创建它们的顺序进行计算,因此只需将默认管线放在底部即可。您的路线注册将如下所示:

routes.MapRoute(
        "Portal1",
        "{controller}/{action}/FirstPortal",
        new {controller = "defaultController", action = "defaultAction", 
             portal = "FirstPortal"}
    );

routes.MapRoute(
        "Portal2",
        "{controller}/{action}/SecondPortal",
        new {controller = "defaultController", action = "defaultAction", 
             portal = "SecondPortal"}
    );

routes.MapRoute(
        "Default",
        "{controller}/{action}",
        new {controller = "defaultController", action = "defaultAction", 
             portal = "Default"}
    );

通过这种方式,您可以使用“门户”路由值选择门户,任何不匹配的请求都将被路由到默认路由中指定的控制器/操作,该控制器/操作可以适当地重定向用户。

这是一个选项,这就是我现在正在做的。但我认为这不是正确的方法,因为它实际上是一个应用程序范围的东西,而不是在控制器级别。换句话说,我认为应用程序必须强制执行规则,如果门户不存在,则重定向,甚至不必费心尝试转到某个控制器。这应该更像是路线不存在,除了重定向,没有去哪里。用户身份也是如此,如果他去的是一个他没有登录的门户网站,则不应该为hole应用程序授权用户身份。