我可以使用会话变量来过滤路线。
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 }
);
}
答案 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未加密。