C # Mvc 3, пользовательский класс маршрутизации? - PullRequest
0 голосов
/ 20 июня 2011

Как я могу получить данные из маршрутов до их обработки?

Таким образом, я получил следующий URL:

localhost:1111/{eventid}/controller/method/id

{eventid} будет доступен почти длявсе звонки на протяжении всего приложения.Теперь мне нужно получить {eventid} ДО того, как мой распознаватель единства IOC получит контроллер.В контроллере я получил зависимость, которая сконфигурирована в единицу, как это:

container.RegisterType<UserIdent>(new InjectionFactory(c =>
{
     ...
     return GetUser(User.Identity.Name, Session["EventId"].ToString());
}));

Так что мне нужно установить Session["EventId"], прежде чем единство разрешит это.

Таким образом, в основном мне нужно только увидеть, присутствует ли EventId в значениях маршрутизации (до того, как сделаны какие-либо вызовы для средства разрешения зависимостей) и если он присутствует, создайте / обновите новый / сеанс с идентификатором.

2) Есть ли лучший способ передать этот идентификатор единице, чем использовать сеанс с идентификатором события?
Это будет происходить при каждом запросе пользователя.

Ответы [ 2 ]

1 голос
/ 20 июня 2011

Звучит как хороший пример использования фильтра действий.

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);
    }
}
0 голосов
/ 20 июня 2011

Вы можете попробовать написать Regex, который будет анализировать Url и устанавливать eventId в cookie или в сеансе.Эту функциональность вы можете реализовать в BeginRequest или в HttpModule.

Я бы написал свою собственную фабрику, которая будет создавать пользователей, а не использовать единство в качестве решения.

...