Я реализовал фабрику пользовательских контроллеров в ASP MVC3 с autofac для достижения очень простого управления плагином, производным от DefaultControllerFactory.
В переопределенном методе GetControllerType (RequestContext requestContext, string controllerName) я делаю некоторые проверкис переменной сеанса или httpcontext.current.user, чтобы определить, какой тип контроллера я должен предоставить конечному пользователю.
Дело в том, что, если я делаю обычный GET (или используя дочерние действия внутри представления), яустановить эти два значения при вызове GetControllerType, но если я выполняю ajax-вызов POST (с помощью contentType: 'application / json; charset = utf-8') через jquery, непосредственно для actionmethod, пользователь и сеанс в моем httpcontext имеют значение nullно они устанавливаются через мгновение, когда я пытаюсь получить к ним доступ в своем действии контроллера (или в actionfilter).
Также AcquireRequestState в этом случае никогда не запускается, и если я перемещаюсь по свойству RequestContext, я вижучто куки для сессии (с session id) действительны.
Есть ли у вас подсказка ??И почему на обычных вызовах GET сеанс и пользователь установлены в это время, и у меня нет этой проблемы?
Код выглядит так:
protected override Type GetControllerType(RequestContext requestContext, string controllerName)
{
if(plugins.All.Where(w=> w.Name == HttpContext.Current.Session["pluginName"].ToString() && w.User == HttpContext.Current.User.Identity.Name)
[do stuff]
}
Я могу избежать сеанса, но не могу избежатьсоответствие для текущего пользователя.