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传递给团结
这将发生在用户提出的每个请求上。

asp.net mvc 3-C#mvc 3,自定义路由类

这听起来是使用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中实现此功能。

至于我,我会写我自己的工厂,它将创建用户,而不是使用统一作为解决方案。