【问题标题】:Use a IRouteConstraint or ActionFilterAttribute when validating session data against route data根据路由数据验证会话数据时使用 IRouteConstraint 或 ActionFilterAttribute
【发布时间】:2011-02-22 22:09:51
【问题描述】:
我最近一直在实现一个 RouteConstraint,其职责是将自定义路由值与会话中的某些模型数据进行匹配。
我发现 IncomingRequest 的 routeDirection 的会话为空。
- 会话是否在直到
控制器是
创建/初始化?
- 如果是这种情况,这种类型的
更适合过滤器的功能
在控制器级别应用?
- 还有其他可行的选择吗?
遗憾的是,除了在第一次进入时配置会话时,确实需要在每个路由上应用此验证,所以我认为路由约束将是最好的解决方案。
谢谢。
【问题讨论】:
标签:
asp.net-mvc
constraints
routes
actionfilterattribute
【解决方案1】:
由于几乎每次调用都会发生这种情况,我可能会处理控制器(或基本控制器)的 OnActionExecuting,然后设置 ActionExecutingContext.Result 以返回一个新的 RedirectToRouteResult ,其中包含您需要的值的 RouteValueDictionary。这也可以封装在 ActionFilter 中(控制器实现 IActionFilter)。
【解决方案2】:
我不清楚您到底要实现什么(重定向到登录页面或呈现一些消息),所以我无法提供任何好的替代解决方案,但我可以告诉您,当 IRouteConstraint 正在运行时会话不可访问评估,因为路由管道发生在加载会话之前。例如。路由可能会呈现根本不需要会话的页面。