asp.net mvc 3-C#mvc 3,自定义路由类
本文关键字:自定义 路由 net mvc 3-C#mvc asp | 更新日期: 2023-09-27 17:59:31
如何在处理路由之前从路由中获取数据?
像这样,我得到了以下网址:
localhost:1111/{eventid}/controller/method/id
{eventid}
将可用于整个应用程序中的几乎所有调用。现在我需要在我的IOC统一解析器获得控制器之前获得{eventid}
。在控制器中,我得到了一个统一配置的依赖项:
container.RegisterType<UserIdent>(new InjectionFactory(c =>
{
...
return GetUser(User.Identity.Name, Session["EventId"].ToString());
}));
所以我需要在unity解决这个问题之前设置Session["EventId"]
。
因此,基本上,我只需要看看EventId是否存在于路由值中(在对依赖解析程序进行任何调用之前),以及它是否存在,就可以创建/更新一个新的/具有id号的会话。
2) 有没有比使用具有事件id的会话更好的方法将该id传递给团结
这将发生在用户提出的每个请求上。
这听起来是使用Action Filter的一个很好的例子。
public class PopulateEventIdInSessionAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
object eventId = filterContext.ActionParameters["eventid"];
if (eventId != null)
{
Session["EventId"] = (int)eventId;
}
base.OnActionExecuting(filterContext);
}
}
您可以尝试编写Regex,它将解析Url并在cookie或会话中设置事件ID。您可以在BeginRequest或HttpModule中实现此功能。
至于我,我会写我自己的工厂,它将创建用户,而不是使用统一作为解决方案。