C#MVC RouteConfig.cs

时间:2017-05-02 19:50:37

标签: c# asp.net model-view-controller

我可以使用会话变量来过滤路线。

 public static void RegisterRoutes(RouteCollection routes)
 {               
        // can I use here session variable to filter the route

        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

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

1 个答案:

答案 0 :(得分:2)

是的,可以使用会话变量来选择(甚至忽略)特定路线(我假设这就是你的意思)。您可以使用Route Constraints

执行此操作
public class SessionConstraint : IRouteConstraint
{
    public bool Match
        (
            HttpContextBase httpContext, 
            Route route, 
            string parameterName, 
            RouteValueDictionary values, 
            RouteDirection routeDirection
        )
    {
        return Session["Foo"]; // value in session is true/false
                               // or use some other expression that is true/false
    }
}

然后你会像这样使用它:

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

这里的想法是我们现在可以使用它来约束条件是否匹配。

但要注意一点。如果您考虑将此用于安全目的,请不要这样做。会话值很容易被欺骗,因为会话cookie未加密。